我理解如何设置自己的路由,但是如何处理路由表中的路径呢?我的意思是,我猜默认的{controller} / {action} / {id}路由可能是一个通用的catchall,但我不确定这是否可行.我喜欢让我的用户知道他们已经请求了数据/不存在的“页面”.
这是[HandleError]过滤器的来源吗?这究竟是如何运作的?
解决方法
如果找不到您的路线,您希望将其作为正常的
HTTP 404错误处理.
如果只将[HandleError]属性添加到类或操作中,MVC将在视图文件夹中查找错误视图.
您还可以添加ErrorController甚至静态页面并将其添加到Web.config:
<customErrors mode="On" > <error statusCode="404" redirect="/Error/PageNotFound/" /> </customErrors>
或者您可以在Global.asax.cs中处理HTTP 404并以编程方式路由到ErrorController.这就是我通常这样做的方式:
protected void Application_Error(object sender,EventArgs e) { var ex = Server.GetLastError().GetBaseException(); var routeData = new RouteData(); if (ex.GetType() == typeof(HttpException)) { var httpException = (HttpException)ex; switch (httpException.GetHttpCode()) { case 404: routeData.Values.Add("action","PageNotFound"); break; default: routeData.Values.Add("action","GeneralError"); break; } } else { routeData.Values.Add("action","GeneralError"); } routeData.Values.Add("controller","Error"); routeData.Values.Add("error",ex); IController errorController = new ErrorController(); errorController.Execute(new RequestContext(new HttpContextWrapper(Context),routeData)); }