關於asp.netCore3.0區域和路由配置

原文: 關於asp.netCore3.0區域和路由配置

 在ASP.NET Core 3.0中路由配置和2.0不同了html

1、MVC 服務註冊ios

ASP.NET Core 3.0 添加了用於註冊內部的 MVC 方案的新選項Startup.ConfigureServices。
三個新的頂級擴展方法與 MVC 方案上IServiceCollection可用。 模板使用這些新方法,而不是UseMvc。 可是,AddMvc繼續像它已在之前的版本。
下面的示例將添加對控制器和與 API 相關的功能,但不是視圖或頁面的支持。 API 模板使用此代碼:app

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
}


下面的示例將添加對控制器、 與 API 相關的功能,和視圖,但不是頁面的支持。 Web 應用程序 (MVC) 模板使用此代碼:框架

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
}

下面的示例添加支持 Razor 頁面和最小控制器支持。 Web 應用程序模板使用此代碼:asp.net

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
}

此外能夠組合的新方法。 下面的示例是等效於調用AddMvcASP.NET Core 2.2 中:ui

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddRazorPages();
}

2、Startup.Configure配置this

通常不建議:
添加UseRouting。
若是該應用程序調用UseStaticFiles,將置於UseStaticFiles以前 UseRouting。
若是應用使用身份驗證/受權功能,如AuthorizePage或[Authorize],將對UseAuthentication並UseAuthorization後 UseRouting。
若是應用使用CORS功能,如[EnableCors],將放置UseCors下一步。
替換UseMvc或UseSignalR與UseEndpoints。
如下是一種Startup.Configure典型的 ASP.NET Core 2.2 應用中:spa

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。.net

添加MapControllers若是應用使用屬性路由。 因爲路由包括對許多框架在 ASP.NET Core 3.0 或更高版本的支持,添加屬性路由的控制器是參加。code

將爲如下內容:
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]")]
相關文章
相關標籤/搜索