【问题标题】:How can I catch that a 404 for a route that does not exist?我怎样才能捕捉到不存在的路线的 404?
【发布时间】:2020-03-31 23:39:35
【问题描述】:

我正在使用 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】:

    可以使用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.cshtmlrazor view的内容。

    【讨论】:

    • 如何确定 404 是端点不匹配的结果,而不是常见的 404 描述到达端点但未找到请求的资源?
    猜你喜欢
    • 2010-12-29
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    相关资源
    最近更新 更多