我有一个简单的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));
但我不知道在哪里处理该异常。我在正确的轨道上吗?
第一种情况是.NET错误页面-因为您的/ NotFound URL被路由覆盖,但是找不到控制器。换句话说,MVC会处理该请求,因为它具有与之匹配的路由(例如"{controller}/{action}/{id}"
,所有三个参数都是可选的或具有默认值),但随后发现它不在其头上。
假设您使用的是默认路由,则确实会抛出该异常GetControllerInstance
-因为没有NotFoundController
。
改为使用“ / Home / NotFound”会从抛出类似的异常(也是404 HttpException
)Controller.HandleUnknownAction
,因为现在将“ NotFound”用作操作名称。
在第二种情况下,URL不匹配任何路由,因此MVC无法处理它-IIS会尝试自身处理并显示其自己的404页面,因为它也找不到任何其他处理程序或实际文件在URL指示的路径上。
至于如何处理所有这些情况,这个stackoverflow问题应该会有所帮助。
引发异常GetControllerInstance
的处理方式的简短版本是“不是-在您可以控制的任何位置”。您可以Application_Error
在global.asax中使用global方法,也可以在链接的问题中使用许多其他方法之一(例如,将控制器工厂替换为已GetControllerInstance
覆盖的工厂,以在发生问题的位置添加异常处理)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句