关于asp.netCore3.0区域和路由配置
在asp.net core 3.0中路由配置和2.0不一样了
一、mvc 服务注册
asp.net core 3.0 添加了用于注册内部的 mvc 方案的新选项startup.configureservices。
三个新的*扩展方法与 mvc 方案上iservicecollection可用。 模板使用这些新方法,而不是usemvc。 但是,addmvc继续像它已在以前的版本。
下面的示例将添加对控制器和与 api 相关的功能,但不是视图或页面的支持。 api 模板使用此代码:
public void configureservices(iservicecollection services) { services.addcontrollers(); }
下面的示例将添加对控制器、 与 api 相关的功能,和视图,但不是页面的支持。 web 应用程序 (mvc) 模板使用此代码:
public void configureservices(iservicecollection services) { services.addcontrollerswithviews(); }
下面的示例添加支持 razor 页面和最小控制器支持。 web 应用程序模板使用此代码:
public void configureservices(iservicecollection services) { services.addrazorpages(); }
此外可以组合的新方法。 下面的示例是等效于调用addmvcasp.net core 2.2 中:
public void configureservices(iservicecollection services) { services.addcontrollers(); services.addrazorpages(); }
二、startup.configure配置
一般不建议:
添加userouting。
如果该应用程序调用usestaticfiles,将置于usestaticfiles之前 userouting。
如果应用使用身份验证/授权功能,如authorizepage或[authorize],将对useauthentication并useauthorization后 userouting。
如果应用使用cors功能,如[enablecors],将放置usecors下一步。
替换usemvc或usesignalr与useendpoints。
以下是一种startup.configure典型的 asp.net core 2.2 应用中:
public void configure(iapplicationbuilder app) { ... app.usestaticfiles(); app.useauthentication(); app.usesignalr(hubs => { hubs.maphub<chathub>("/chat"); }); app.usemvc(routes => { routes.maproute("default", "{controller=home}/{action=index}/{id?}"); }); }
现在的控制器映射内发生useendpoints。
添加mapcontrollers如果应用使用属性路由。 由于路由包括对许多框架在 asp.net core 3.0 或更高版本的支持,添加属性路由的控制器是参加。
将为以下内容:
maproute 使用 mapcontrollerroute
maparearoute 使用 mapareacontrollerroute
由于路由现在包括对不止是 mvc 的支持,已更改了术语进行明确说明他们所做的这些方法。 如传统路由mapcontrollerroute / mapareacontrollerroute / mapdefaultcontrollerroute它们要添加的顺序应用。 将第一位更具体的路由 (如某一区域的路由)。
如下示例中:
mapcontrollers 添加了对属性路由的控制器支持。
mapareacontrollerroute 将控制器的传统路由添加区域。
mapcontrollerroute 添加控制器的常规路由。
现在映射 razor 页面内发生useendpoints。
添加maprazorpages如果应用使用 razor 页面。 由于终结点路由包括对许多框架的支持添加 razor 页面现在参加。
更新后asp.netcore3.0中startup.configure代码:
public void configure(iapplicationbuilder app, iwebhostenvironment env) { if (env.isdevelopment()) { app.usedeveloperexceptionpage(); } else { app.useexceptionhandler("/home/error"); // the default hsts value is 30 days. you may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.usehsts(); } app.usehttpsredirection(); app.usestaticfiles(); app.usecookiepolicy(); app.userouting(); app.useauthorization(); app.useendpoints(endpoints => { endpoints.mapcontrollerroute( name: "default", pattern: "{controller=home}/{action=index}/{id?}"); endpoints.mapareacontrollerroute( name: "areas", "areas", pattern: "{area:exists}/{controller=home}/{action=index}/{id?}"); endpoints.maprazorpages(); }); }
如果要进行分区路由,需要在控制器controller头加area和route标签,否则不能像在asp.netcore2.0中自动路由控制器和action。示例代码如下:
namespace webapplication1.areas.cms.controllers { [area("cms")] [route("cms/[controller]/[action]")] public class newscontroller : controller { public iactionresult index() { return view(); } public iactionresult list() { return view(); } } }
这两句一定要加[area("cms")]、[route("cms/[controller]/[action]")]
上一篇: 十天学会php之第四天