Asp.net mvc 3 自定义错误适用于HttpCode 403,但不适用于500?

Asp.net mvc 3 自定义错误适用于HttpCode 403,但不适用于500?,asp.net-mvc-3,custom-errors,Asp.net Mvc 3,Custom Errors,我正在我的MVC3应用程序中实现自定义错误,它在web.config中打开: <customErrors mode="On"> <error statusCode="403" redirect="/Errors/Http403" /> <error statusCode="500" redirect="/Errors/Http500" /> </customErrors> 为了测试,我在另一个控制器中抛出异常: public class

我正在我的MVC3应用程序中实现自定义错误,它在web.config中打开:

<customErrors mode="On">
  <error statusCode="403" redirect="/Errors/Http403" />
  <error statusCode="500" redirect="/Errors/Http500" />
</customErrors>
为了测试,我在另一个控制器中抛出异常:

public class ThrowingController : Controller
{
    public ActionResult NotAuthorised()
    {
        throw new HttpException(403, "");
    }

    public ActionResult ServerError()
    {
        throw new HttpException(500, "");
    }
}
403工作-我被重定向到我的自定义“/Errors/Http403”

500不起作用-我被重定向到共享文件夹中的默认错误页


有什么想法吗?

我也有同样的问题,我直接在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

除了标准的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>
但它并不完美,因为我试图检索最后一个始终为空的错误

Server.GetLastError()

有关MVC3中自定义错误的最全面的信息,请参阅,我发现这非常有帮助。

我不能接受这个答案,因为如果不使用Application\u Error方法,而不使用httpErrors config部分,我就无法接受它。我会给你的答案a+1,但我还没有足够的代表!干杯!当然,没有理由说httpErrors不起作用(配置良好),我使用的解决方案让我对未修补的异常有更多的控制。如果httpException为null,那么应该假设它是一个500错误,这是无效的逻辑。必须通过异常传递的数据确认500错误。我想再次确认:Server.GetLastError似乎无法恢复:(
GlobalFilters.Filters.Add(new HandleErrorAttribute());
Server.GetLastError()