如何将中间件配置为仅重定向404状态代码

时间:2020-07-04 23:42:47

标签: asp.net-core-3.1

遇到404时,我想重定向到特定页面。

我尝试了一些教程和StatusCodePages,但没有任何效果。

有人有Core 3.1的示例,该示例仅重定向404而不是所有状态代码吗?

2 个答案:

答案 0 :(得分:1)

有两个选项,它们都应在.Net Core中工作。将此添加到web.config文件:

<customErrors mode="Off">
     <error statusCode="404" redirect="~/errorPages/PageNotFound.aspx" />
</customErrors>

或者您可以仅在Startup.cs中添加自己的中间件,而不使用诊断程序包:

app.Use(async (context, next) =>
        {
            if(context.Response.Status == 404)
            {
                // return page
            }
            else
            {
                await next.Invoke();
            }
            // loggin
        });

答案 1 :(得分:0)

很简单。

app.UseStatusCodePagesWithReExecute("/Home/Error/{0}");

对于此示例,在家庭控制器中,创建一个名为Error的方法,该方法采用整数。

[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
[Route("Home/Error/{statusCode}")]
public IActionResult Error(int statusCode)
{
    var error = new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier };
    // Error caused by something other than a 404 should not be processed here.
    if (statusCode != 404)
    {
        return View(error);
    }

    // Logic that handles 404 errors goes here.
}

现在,所有异常都将路由到此方法,但是通过检查状态码,您可以针对404错误设置一些特定的逻辑。