我正在我的MVC3应用程序中实现自定义错误,它在web.config中打开:
<customErrors mode="On">
<error statusCode="403" redirect="/Errors/Http403" />
<error statusCode="500" redirect="/Errors/Http500" />
</customErrors>
我的控制器非常简单,具有相应的正确命名视图:
public class ErrorsController : Controller
{
public ActionResult Http403()
{
return View("Http403");
}
public ActionResult Http500()
{
return View("Http500");
}
}
为了测试,我在另一个控制器中抛出异常:
public class ThrowingController : Controller
{
public ActionResult NotAuthorised()
{
throw new HttpException(403, "");
}
public ActionResult ServerError()
{
throw new HttpException(500, "");
}
}
403工作 - 我被重定向到我的自定义“/ Errors / Http403”。
500不起作用 - 我被重定向到共享文件夹中的默认错误页面。
有什么想法吗?
答案 0 :(得分:4)
除了标准的customErros配置之外,我还使用httpErrors来启动和运行500个错误:
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="403" subStatusCode="-1" />
<error statusCode="403" path="/Errors/Http403" responseMode="ExecuteURL" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" path="/Errors/Http500" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
从global.asax
中删除这一行GlobalFilters.Filters.Add(new HandleErrorAttribute());
然而,它并不完美,因为我正在尝试检索始终为null的最后一个错误。
Server.GetLastError()
请参阅https://stackoverflow.com/a/7499406/1048369,了解MVC3中有关自定义错误的最全面的内容,我发现这些内容非常有用。
答案 1 :(得分:0)
我遇到了同样的问题,在这种情况下我直接在Global.asax中捕获了Exception:
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
var code = httpException == null ? 500 : httpException.GetHttpCode();
// Log the exception.
if (code == 500)
logError.Error(exception);
Server.ClearError();
Context.Items["error"] = code;
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
routeData.Values.Add("action", "Index");
routeData.Values.Add("code", code);
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
重定向到我的自定义错误500:/错误/索引?代码= 500