Maj*_*ons 7 asp.net-mvc routes
我理解如何设置自己的路由,但是如何处理路由表中的路径呢?我的意思是,我猜默认{controller}/{action}/{id}路线可能是一个通用的捕获,但我不确定这是不是可行的方法.我喜欢让我的用户知道他们已经请求了数据/不存在的"页面".
这是[HandleError]过滤器进来的地方吗?这究竟是如何运作的?
如果找不到您的路由,您希望将其作为正常的HTTP 404错误处理.
如果只将[HandleError]属性添加到类或操作中,MVC将Error在视图文件夹中查找视图.
您还可以添加一个ErrorController甚至是静态页面并将其添加到您的Web.config:
<customErrors mode="On" >
<error statusCode="404" redirect="/Error/PageNotFound/" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
或者您可以处理您的HTTP 404 Global.asax.cs并以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));
}
Run Code Online (Sandbox Code Playgroud)