я использую
protected void Application_Error(object sender, EventArgs e)
по моему Global.asax.cs
чтобы перехватить все нештатные исключения, сделав что-то вроде этого внутри:
try
{
Response.Clear();
var errorController = new ErrorController();
var result = errorController.Error(statusCode, exception);
result.ExecuteResult(new ControllerContext(new RequestContext(new HttpContextWrapper(Context), routeData), errorController));
Server.ClearError();
}
catch(Exception e)
{
HttpContext.Current.Response.StatusCode = 500;
HttpContext.Current.Response.Write(e.Message);
}
Мой контроллер ошибок выглядит так:
public ActionResult Error(HttpStatusCode statusCode, Exception exception)
{
var resource = new ErrorResource(statusCode, exception);
this.response.StatusCode = resource.StatusCode;
#if !DEBUG
return View("ReleaseError", resource);
#endif
return View("DebugError", resource);
}
Тогда я могу сделать:
throw new HttpException(404, "not found");
или
throw new HttpException(403, "not found);
и т. Д. Программно.
Я думаю, что MVC2 представил новый результат действия для случаев ошибки, но не использовал его, вероятно, воняет, как и остальная часть платформы.