ASP.NET Coreは404エラーを実装してホームページにジャンプする方法

4119 ワード

ユーザがWebブラウザでURLを間違えると、ASPにアクセスする.NET Coreサイトの次の存在しないURLアドレスは、デフォルトではASP.NET Coreはブラウザに有名な404エラーを返します.では、ASPを譲る方法はありませんか.NET Coreが404のHttpステータスコードを返すと、自動的にホームページにジャンプしますか?
 
ASPを使用する.NET Coreのミドルウェア(Middleware)でいいです.
まず、いったんASPを処理するためにJump 404 Middlewareというミドルウェアクラスを定義します.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)の後です.
 
次に、Jump 404 Middlewareミドルウェアの拡張クラスJump 404 MiddlewareExtensionを定義します.
public static class Jump404MiddlewareExtension
{
    public static void UseJump404(this IApplicationBuilder app)
    {
        app.UseMiddleware();
    }
}

 
最後にASP.NET CoreのStartupクラスのConfigureメソッドでは、Jump 404 Middlewareミドルウェアを使用します.
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アドレスをサイトのホームページにジャンプしてエラーを報告することを避け、現在では多くの大手サイト(京東、淘宝など)がこの機能を実現している.
 
転載先:https://www.cnblogs.com/OpenCoder/p/10011338.html