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地址跳轉到網站主頁上,避免了報錯,其實現在很多大型網站(京東、淘寶等)都實現了這個功能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM