从ASP.NET MVC 4返回不同的404页

戴维斯

我有一个简单的ASP.NET MVC 4 Internet应用程序。当我转到/ NotFound时,我得到了他的错误页面:

在此处输入图片说明

而如果我去/ Home /关于/某事/不存在,我会得到

在此处输入图片说明

谁能告诉我幕后情况?

我进入了System.Web.Mvc中DefaultControllerFactory类的GetControllerInstance,可以看到:

throw new HttpException(404,
String.Format(
    CultureInfo.CurrentCulture,
    MvcResources.DefaultControllerFactory_NoControllerFound,
    requestContext.HttpContext.Request.Path));

但我不知道在哪里处理该异常。我在正确的轨道上吗?

吉米·Th

一种情况.NET错误页面-因为您的/ NotFound URL被路由覆盖,但是找不到控制器。换句话说,MVC会处理该请求,因为它具有与之匹配的路由(例如"{controller}/{action}/{id}",所有三个参数都是可选的或具有默认值),但随后发现它不在其头上。

假设您使用的是默认路由,则确实会抛出该异常GetControllerInstance-因为没有NotFoundController

改为使用“ / Home / NotFound”会从抛出类似的异常(也是404 HttpExceptionController.HandleUnknownAction,因为现在将“ NotFound”用作操作名称。

第二种情况下,URL不匹配任何路由,因此MVC无法处理它-IIS会尝试自身处理并显示其自己的404页面,因为它也找不到任何其他处理程序或实际文件在URL指示的路径上。

至于如何处理所有这些情况,这个stackoverflow问题应该会有所帮助。

引发异常GetControllerInstance的处理方式的简短版本是“不是-在您可以控制的任何位置”。您可以Application_Error在global.asax中使用global方法,也可以在链接的问题中使用许多其他方法之一(例如,将控制器工厂替换为已GetControllerInstance覆盖的工厂,以在发生问题的位置添加异常处理)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章