AddMvcCore,AddControllers,AddControllersWithViews,AddRazorPages的区别
AddMvc/AddMvcCore/AddControllers等区别
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
要记住的要点:
- 所有方法都支持控制器。因此,如果您只需要一个控制器,那么您可以使用任何一种方法。
- 模型绑定功能也可用于所有方法。模型绑定用于将传入数据映射到控制器操作方法。
- 除了
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()
方法将添加额外的功能,即使您的应用程序不需要这些功能可能会影响应用程序的性能。
.NET5 AddMvc和AddControllersWithViews区别 - 猿外 - 博客园 (cnblogs.com)
作者:Chuck Lu GitHub |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2019-08-03 在HearthRanger中使用Silverfish
2019-08-03 ReSharper “Cannot resolve symbol” even when project builds
2018-08-03 problem in Sourcetree
2018-08-03 Get started with Sourcetree
2015-08-03 Fixing common issues when hosting a .NET 4.0 WCF service in IIS 7
2015-08-03 一句话的设计模式
2015-08-03 wcf纯代码创建控制台应用