如何为不存在的路由捕获404?

问题描述 投票:0回答:1

我正在使用ASP.NET Core 3.0,并尝试编写代码以将对那些请求的自定义响应返回到不存在的路由或与任何已注册终结点都不匹配的路由。

根据我的发现和理解,有一个可以处理状态代码的中间件,所以我正在按照以下步骤进行操作

app.UseStatusCodePages(context => {

    if (context.HttpContext.Response.StatusCode == 404) 
    {
        // Validates that is a redirection because it didn't
        // match any endpoint
    }

    return Task.CompletedTask;
});

我的问题是,由于找不到任何匹配的端点,我如何确定该404是否对应于重定向?因为它还可以引用它找不到终结点确实存在的指定资源,但是该资源不可用,等等。

提前感谢。

c# asp.net asp.net-core routing asp.net-core-3.0
1个回答
0
投票

您可以使用UseStatusCodePagesWithReExecute扩展方法:

app.UseStatusCodePagesWithReExecute("/error/page{0}");

然后,您创建新的控制器来捕获该事件:

public class ErrorController : Controller
{
    public IActionResult Page401()
    {
        // render Page401.cshtml
        return View();
    }

    public IActionResult Page404()
    {
        // render Page404.cshtml
        return View();
    }
}

最后,您为要捕获的所有状态码创建视图。

当您使用不存在的URL进行测试时,页面将呈现为Page404.cshtml剃刀视图的内容。

© www.soinside.com 2019 - 2024. All rights reserved.