如何正确处理ASP.NETMVC中的404?

如何正确处理ASP.NETMVC中的404?

我用的是RC2

使用URL路由:

routes.MapRoute(
    "Error",
     "{*url}",
     new { controller = "Errors", action = "NotFound" }  // 404s);

上面似乎处理了类似这样的请求(假设初始MVC项目设置默认路由表):“/blah/blah”

在控制器本身中重写HandleUnKnownAction():

// 404s - handle here (bad action requestedprotected override void HandleUnknownAction(string actionName) {
    ViewData["actionName"] = actionName;
    View("NotFound").ExecuteResult(this.ControllerContext);}

但是,前面的策略不处理对不良/未知控制器的请求。例如,我没有“/IDoNotExist”,如果我请求它,我将从Web服务器获得通用404页,如果我使用路由+覆盖,则不会得到我的404页。

最后,我的问题是:是否有任何方法可以使用MVC框架本身中的路由或其他方法来捕获这种类型的请求?

或者我应该默认使用Web.Config自定义Error作为404处理程序,而忘记这一切吗?我认为,如果使用CustomError,由于Web.Config对直接访问的限制,我必须将通用404页存储在/view之外。


侃侃尔雅
浏览 1629回答 3
3回答

守着星空守着你

ASP.NETMVC并不很好地支持自定义404页面。自定义控制器工厂,捕获所有路由,基本控制器类HandleUnknownAction-啊!到目前为止,IIS自定义错误页是更好的选择:web.config<system.webServer> &nbsp;&nbsp;<httpErrors&nbsp;errorMode="Custom"&nbsp;existingResponse="Replace"> &nbsp;&nbsp;&nbsp;&nbsp;<remove&nbsp;statusCode="404"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="404"&nbsp;responseMode="ExecuteURL"&nbsp;path="/Error/PageNotFound"&nbsp;/> &nbsp;&nbsp;</httpErrors></system.webServer>错误控制器public&nbsp;class&nbsp;ErrorController&nbsp;:&nbsp;Controller{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;PageNotFound() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.StatusCode&nbsp;=&nbsp;404; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;View(); &nbsp;&nbsp;&nbsp;&nbsp;}}样本工程基于GitHub的Test 404直播网站
打开App,查看更多内容
随时随地看视频慕课网APP