我知道如何設置自己的路由,但是如何處理路由表中的路由?我的意思是,我想默認的{controller}/{action}/{id}
路線可能是一個通用的方式,但我不確定是否要走。我喜歡讓我的用戶知道他們已經請求了不存在的數據/頁面。處理ASP.NET MVC中的路由錯誤
這是[HandleError]
過濾器進來的地方嗎?這是如何工作的?
我知道如何設置自己的路由,但是如何處理路由表中的路由?我的意思是,我想默認的{controller}/{action}/{id}
路線可能是一個通用的方式,但我不確定是否要走。我喜歡讓我的用戶知道他們已經請求了不存在的數據/頁面。處理ASP.NET MVC中的路由錯誤
這是[HandleError]
過濾器進來的地方嗎?這是如何工作的?
如果找不到您的路線,您希望將其作爲正常的HTTP 404錯誤處理。
如果您只將[HandleError]
屬性添加到您的課程或操作中,MVC將在您的視圖文件夾中查找Error
視圖。
你也可以添加一個ErrorController
甚至一個靜態頁面,並添加到您的Web.config
:
<customErrors mode="On" >
<error statusCode="404" redirect="/Error/PageNotFound/" />
</customErrors>
或者你也可以處理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));
}
可以定義這樣的路線:
routes.MapRoute(
"PageNotFound",
"{*catchall}",
new { controller = "Home", action = "PageNotFound" }
);
比使控制器這樣一個動作:
public ActionResult PageNotFound()
{
ViewBag.Message = "Sorry, the page you requested does not exist.";
return View();
}
這條航線前人的精力在最後補充道,這樣它會抓住任何要求無法映射。
HandleError
屬性用於捕獲可能發生在控制器操作中的異常。
問題這種方法是..如果你試圖使孩子動作@ Html.Action(routeValues)與錯誤的價值觀,它會使`PageNotFound`行動`PartialView`沒有實際報告任何異常。 – Nenad 2013-10-11 14:25:14