当前位置:  开发笔记 > 编程语言 > 正文

如何捕获所有路由来处理ASP.NET MVC的'404 page not found'查询?

如何解决《如何捕获所有路由来处理ASP.NETMVC的'404pagenotfound'查询?》经验,为你挑选了3个好方法。

是否有可能创建一个捕获所有的最终路由...并将用户弹回到ASP.NET MVC中的404视图?

注意:我不想在我的IIS设置中进行此设置.



1> Pure.Krome..:

我自己找到了答案.

理查德·丁沃尔(Richard Dingwall)在各种策 我特别喜欢FilterAttribute解决方案.我不喜欢在willy nilly周围抛出异常,所以我会看看我是否可以改进:)

对于global.asax,只需添加此代码作为注册的最后一条路径:

routes.MapRoute(
    "404-PageNotFound",
    "{*url}",
    new { controller = "StaticContent", action = "PageNotFound" }
    );


如果您仍然在RegisterRoutes()中拥有默认路由(IE {controller}/{action}/{id}),它将捕获与普通MVC请求的格式匹配的所有URL.换句话说,如果不符合正常格式(**blah/blah/blah/blah**),catch-all路径只能拦截坏URL.对于不存在的控制器,必须通过传统的ASP.NET处理来处理异常.有关处理的详细说明,请访问http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404s-in-asp-net-mvc/620559#620559
我试过这个,但它不起作用.我已将路由置于默认路由下,但仍然出现404错误.
@RonnBlack是对的.我通过为每个控制器明确创建路由来克服这个问题.但是神奇的`{*url}`仍然没有克服这个问题.如果映射到路由的URL可用但控制器/操作本身未找到,该怎么办?如果我浏览到/ home/About123丑陋asp.net错误页面还是来了,因为路线不达到了`{*URL}`但是我家的路由处理.

2> smdrager..:

这个问题首先出现,但更容易的答案出现在后来的问题中:

自定义ASP.NET MVC 404错误页面的路由

我通过创建一个返回本文中视图的ErrorController来使我的错误处理工作.我还必须在global.asax中添加"Catch All"到路由.

如果它不在Web.config中,我无法看到它将如何到达任何这些错误页面.?我的Web.config必须指定:

customErrors mode="On" defaultRedirect="~/Error/Unknown"

然后我还补充说:

error statusCode="404" redirect="~/Error/NotFound"

希望这可以帮助.

我现在喜欢这种方式,因为它很简单:

 
    
 


@LouisSomers自从这个回答以来,我发现更好的方法是在这个问题中描述的那个:http://stackoverflow.com/questions/1171035/asp-net-mvc-custom-error-handling-application-error-global- asax我不想将用户重定向到不同的URL,因为它不太方便用户使用(即使我在开发时发现它很烦人).干杯.

3> 小智..:

您也可以如下处理Global.asax.cs中的NOT FOUND错误

protected void Application_Error(object sender, EventArgs e)
{
    Exception lastErrorInfo = Server.GetLastError();
    Exception errorInfo = null;

    bool isNotFound = false;
    if (lastErrorInfo != null)
    {
        errorInfo = lastErrorInfo.GetBaseException();
        var error = errorInfo as HttpException;
        if (error != null)
            isNotFound = error.GetHttpCode() == (int)HttpStatusCode.NotFound;
    }
    if (isNotFound)
    {
        Server.ClearError();
        Response.Redirect("~/Error/NotFound");// Do what you need to render in view
    }
}

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有