1.services.AddMvcCore()
只注册运行 Controller/Razor Pages
必要的核心服务,确保 Pipeline
程序可动作,其馀如像 Data Annotation Model Validation
、身分验证等服务要自己加挂,除有特殊客制需求,一般不太常用。
2.services.AddControllers()
包含 AddMvcCore()
所做的动作外,再加上:
- 身分验证服务
Swagger/Open API
等 API 文件动态产生功能Data Annotation
- 支援Attribute
资料检核及IValidateObject
Formatter Mapping
- 依Request
需求提供不同格式(JSON/XML
)内容CORS
- 支援跨网域整合
要用 Controller
但不会用到 View
,例如纯 WebAPI
,可以选这个。
3.services.AddRazorPages()
包含 AddMvcCore()
所有功能,再加上:
Razor Pages
功能- 身分验证服务
Data Annotation
- 支援Attribute
资料检核及IValidateObject
Cache Tag Helper
4.services.AddControllersWithViews()
包含 AddControllers()
的所有项目,再加上:
cshtml Razor View
Cache Tag Helper
要使用标准 Model + View + Controller
架构,通常就选这个。
5.services.AddMvc()
等于 AddControllersWithViews()
加 AddRazorPages()
,不想漏掉功能发挥 ASP.NET Core 最大威力,选这个就对了。
AddMvc/AddMvcCore/AddControllers
等区别
比较一下AddMvc、AddMvcCore、AddController
等在服务配置时的区别及各自拥有的功能。
1.services.AddMvcCore()
只注册路由请求和执行控制器所必要的核心服务,确保 Pipeline
程序可运转。除非是有能力并想完全去自主DIY,一般不建议直接使用这个。
2.services.AddControllers()
除包含了 AddMvcCore()
所有功能,再加上:
Authorization
ApiExplorer
Data Annotation
Formatter Mapping
CORS
要用 Controller
但不用View
,新建WebAPI
时,默认采用的就是这个,使用这个时,与SwashBuckle
配合时,无需再额外引入ApiExplorer
,自身已经依赖。
3.services.AddRazorPages()
包含 AddMvcCore()
所有功能,再加上:
- Razor Pages
- Authorization
- Data Annotation
- Cache Tag Helper
4.services.AddControllersWithViews()
包含 AddControllers()
所有功能,再加上:
- cshtml和Razor View
- Cache Tag Helper
标准MVC模式,常用Razor
视图,使用这个就够了
5.services.AddMvc()
包含 AddControllersWithViews()
及 AddRazorPages()
功能。 包含的功能最为齐全,如果不想遗漏功能,直接使用这个就行
AddController vs AddMvc vs AddControllersWithViews vs AddRazorPages
AddController vs AddMvc vs AddControllersWithViews vs AddRazorPages
在本文中,我将讨论 ASP.NET Core 应用程序中的 AddController()、AddMvc()、AddControllersWithViews()
和 AddRazorPages()
方法。 我们还将讨论何时使用 ASP.NET Core 中的哪些方法。
ASP.NET Core 中可用的不同方法:
如果转到 AddMvc()
扩展方法的定义,除了 AddMvc()
方法外,还有其他方法(AddController()、AddControllersWithViews()
和 AddRazorPages()
)可用,如下图所示。 所有这些方法都作为 IServiceCollection
接口上的扩展方法实现。
让我们一一详细讨论所有这些方法是什么以及它们提供了哪些功能。
要记住的要点:
- 所有方法都支持控制器。因此,如果您只需要一个控制器,那么您可以使用任何一种方法。
- 模型绑定功能也可用于所有方法。模型绑定用于将传入数据映射到控制器操作方法。
- 除了
AddRazorPages
方法之外,所有其他方法都支持API Explorer
功能。API Explorer
使用了应用程序中所有可用 API 的列表。 - 授权可用于所有四种方法。授权主要用于提供安全功能,
- 同样,除了
AddRazorPages
方法之外,所有其他方法都支持CORS
。CORS
基本上是一个允许跨域调用的功能。这意味着他们可以从其他域使用jQuery AJAX
访问您的方法。 - 所有方法都支持验证功能。验证主要用于验证
HTTP
请求数据。在 .NET Core应用程序中,我们可以使用称为数据注释的概念来实现验证。 - 除了
AddRazorPages
方法外,所有其他方法都支持格式化程序映射功能。Formatter Mapping
功能基本上用于格式化您的操作方法的输出,例如 JSON 或 XML 等。 Antiforgery、TempData
和Views
功能在AddControllers
方法中不可用。- 页面仅适用于
AddMVC
和AddRazorPages
方法。 TagHelpers
在AddControllers
方法中不可用,可用于其余三种方法。- 内存缓存功能在
AddControllers
方法中也不可用,但在其余三个方法中可用。
我们的应用程序使用哪种方法?
这取决于您要创建的应用程序类型。
- 如果要创建没有视图的 Web API 应用程序,则需要使用
AddControllers()
扩展方法。 - 如果要使用
Razor Page
应用程序,则需要在Startup
类的ConfigureService
方法中使用AddRazorPages()
扩展方法。 - 如果你想开发一个模型视图控制器,即 MVC 应用程序,那么你需要使用
AddControllersWithViews()
方法。此外,如果您希望Pages
功能进入您的MVC
应用程序,那么您需要使用AddMVC
方法。
AddMvc
:此方法具有所有功能。 因此,您可以使用此 AddMVC
方法来处理任何类型的应用程序(Web API、MVC 和 Razor Pages)。
注意:添加 AddMvc()
方法将添加额外的功能,即使您的应用程序不需要这些功能可能会影响应用程序的性能。