asp.net Core3.0区域与路由配置的方法
在ASP.NETCore3.0中路由配置和2.0不一样了
一、MVC服务注册
ASP.NETCore3.0添加了用于注册内部的MVC方案的新选项Startup.ConfigureServices。
三个新的顶级扩展方法与MVC方案上IServiceCollection可用。模板使用这些新方法,而不是UseMvc。但是,AddMvc继续像它已在以前的版本。
下面的示例将添加对控制器和与API相关的功能,但不是视图或页面的支持。API模板使用此代码:
publicvoidConfigureServices(IServiceCollectionservices) { services.AddControllers(); }
下面的示例将添加对控制器、与API相关的功能,和视图,但不是页面的支持。Web应用程序(MVC)模板使用此代码:
publicvoidConfigureServices(IServiceCollectionservices) { services.AddControllersWithViews(); }
下面的示例添加支持Razor页面和最小控制器支持。Web应用程序模板使用此代码:
publicvoidConfigureServices(IServiceCollectionservices) { services.AddRazorPages(); }
此外可以组合的新方法。下面的示例是等效于调用AddMvcASP.NETCore2.2中:
publicvoidConfigureServices(IServiceCollectionservices) { services.AddControllers(); services.AddRazorPages(); }
二、Startup.Configure配置
一般不建议:
添加UseRouting。
如果该应用程序调用UseStaticFiles,将置于UseStaticFiles之前UseRouting。
如果应用使用身份验证/授权功能,如AuthorizePage或[Authorize],将对UseAuthentication并UseAuthorization后UseRouting。
如果应用使用CORS功能,如[EnableCors],将放置UseCors下一步。
替换UseMvc或UseSignalR与UseEndpoints。
以下是一种Startup.Configure典型的ASP.NETCore2.2应用中:
publicvoidConfigure(IApplicationBuilderapp) { ... app.UseStaticFiles(); app.UseAuthentication(); app.UseSignalR(hubs=> { hubs.MapHub("/chat"); }); app.UseMvc(routes=> { routes.MapRoute("default","{controller=Home}/{action=Index}/{id?}"); }); }
现在的控制器映射内发生UseEndpoints。
添加MapControllers如果应用使用属性路由。由于路由包括对许多框架在ASP.NETCore3.0或更高版本的支持,添加属性路由的控制器是参加。
将为以下内容:
MapRoute使用MapControllerRoute
MapAreaRoute使用MapAreaControllerRoute
由于路由现在包括对不止是MVC的支持,已更改了术语进行明确说明他们所做的这些方法。如传统路由MapControllerRoute/MapAreaControllerRoute/MapDefaultControllerRoute它们要添加的顺序应用。将第一位更具体的路由(如某一区域的路由)。
如下示例中:
- MapControllers添加了对属性路由的控制器支持。
- MapAreaControllerRoute将控制器的传统路由添加区域。
- MapControllerRoute添加控制器的常规路由。
现在映射Razor页面内发生UseEndpoints。
添加MapRazorPages如果应用使用Razor页面。由于终结点路由包括对许多框架的支持添加Razor页面现在参加。
更新后asp.netCore3.0中Startup.Configure代码:
publicvoidConfigure(IApplicationBuilderapp,IWebHostEnvironmentenv) { if(env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); //ThedefaultHSTSvalueis30days.Youmaywanttochangethisforproductionscenarios,seehttps://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。示例代码如下:
namespaceWebApplication1.Areas.CMS.Controllers { [Area("CMS")] [Route("CMS/[controller]/[action]")] publicclassNewsController:Controller { publicIActionResultIndex() { returnView(); } publicIActionResultList() { returnView(); } } }
这两句一定要加[Area("CMS")]、[Route("CMS/[controller]/[action]")]
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。