1. 程式人生 > >ASP.NET Core 如何實現404錯誤跳轉到主頁

ASP.NET Core 如何實現404錯誤跳轉到主頁

假如使用者在Web瀏覽器上敲錯了URL,訪問了ASP.NET Core站點下一個不存在的URL地址,那麼預設情況下ASP.NET Core會返回給瀏覽器著名的404錯誤,那麼有什麼辦法可以讓ASP.NET Core返回404的Http狀態碼時,自動跳轉到主頁嗎?

 

使用ASP.NET Core的中介軟體(Middleware)即可。

首先我們定義一個叫Jump404Middleware的中介軟體類,用於處理一旦ASP.NET Core的Pipeline返回404響應狀態碼,就跳轉到網站主頁:

public class Jump404Middleware
{
    private
readonly RequestDelegate next; public Jump404Middleware(RequestDelegate next) { this.next = next; } public async Task Invoke( Microsoft.AspNetCore.Http.HttpContext context) { await next.Invoke(context); var response = context.Response;
//如果是404就跳轉到主頁 if (response.StatusCode == 404) { response.Redirect("/"); } } }

注意檢測Response狀態碼(是否為404)和Redirect跳轉的邏輯都是寫在await next.Invoke(context)之後的。

 

然後定義一個Jump404Middleware中介軟體的擴充套件類Jump404MiddlewareExtension:

public static class Jump404MiddlewareExtension
{
    
public static void UseJump404(this IApplicationBuilder app) { app.UseMiddleware<Jump404Middleware>(); } }

 

最後在ASP.NET Core中Startup類的Configure方法中使用Jump404Middleware中介軟體即可:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    app.UseJump404();

    app.UseCookiePolicy();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

 

這樣當用戶在Web瀏覽器上敲錯了URL,訪問了ASP.NET Core站點下一個不存在的URL地址時,ASP.NET Core就不會返回404錯誤了,而是將使用者瀏覽器的URL地址跳轉到網站主頁上,避免了報錯,其實現在很多大型網站(京東、淘寶等)都實現了這個功能。