为什么 .NET Core Web API 调用 AddMVC() 和 UseMVC()?

Ber*_* IT 11 asp.net-mvc asp.net-web-api asp.net-core

当使用 .NET 核心 Web API 的脚手架时,它包括:

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Run Code Online (Sandbox Code Playgroud)

ConfigureServices方法和

app.UseMvc();
Run Code Online (Sandbox Code Playgroud)

在配置方法中。

为什么是这样?Web API 不需要“模型视图控制器”。它可能只需要“模型”和“控制器”。我将 MVC 与 Views 和 Razor 联系在一起。这些声明可以省略吗?

Rya*_*yan 7

如果我们查看内部扩展的源代码AddMvc我们可以清楚地看到这些:

public static IMvcBuilder AddMvc(this IServiceCollection services)
    {
        if (services == null)
        {
            throw new ArgumentNullException(nameof(services));
        }

        var builder = services.AddMvcCore();

        builder.AddApiExplorer();
        builder.AddAuthorization();

        AddDefaultFrameworkParts(builder.PartManager);

        // Order added affects options setup order

        // Default framework order
        builder.AddFormatterMappings();
        builder.AddViews();
        builder.AddRazorViewEngine();
        builder.AddRazorPages();
        builder.AddCacheTagHelper();

        // +1 order
        builder.AddDataAnnotations(); // +1 order

        // +10 order
        builder.AddJsonFormatters();

        builder.AddCors();

        return new MvcBuilder(builder.Services, builder.PartManager);
    }
Run Code Online (Sandbox Code Playgroud)

在我看来,对于 Web API,您可能需要AddJSONFormatters()AddCors()。但是,您还需要AddMvcCore(). 这包括路由、属性、过滤器、结果执行器、模型绑定器、控制器等。

参考https://codingblast.com/using-web-api-asp-net-core-without-mvc-specific-stuff/