Если Ваш маршрут не найден, вы хотите обработать его как обычную ошибку 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));
}
Проблема с этим подходом является то, что .. если вы пытаетесь оказать ребенку действие @ Html.Action (routeValues) с неправильными значениями, оно будет оказывать действие 'PageNotFound' как' PartialView' без фактического представления каких-либо исключений. – Nenad