ASP.NET Core 如何實現404錯誤跳轉到主頁
阿新 • • 發佈:2018-11-24
假如使用者在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 { privatereadonly 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地址跳轉到網站主頁上,避免了報錯,其實現在很多大型網站(京東、淘寶等)都實現了這個功能。