我在我的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不起作用-我被重定向到共享文件夹中的默认错误页面。
有什么想法吗?
发布于 2012-04-22 21:13:48
除了标准的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());然而,它并不完美,因为我正在尝试检索最后一个总是为空的错误。
Server.GetLastError()有关MVC3中自定义错误的最全面的文章,请参阅https://stackoverflow.com/a/7499406/1048369,这对我很有帮助。
发布于 2012-04-20 23:09:05
我也遇到了同样的问题,在这种情况下,我直接在Global.asax中捕获了异常:
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: / Error /Index?code=500
https://stackoverflow.com/questions/10248700
复制相似问题