自定义错误适用于HttpCode 403但不适用于500?

Nic*_*ick 5 custom-errors asp.net-mvc-3

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

<customErrors mode="On">
  <error statusCode="403" redirect="/Errors/Http403" />
  <error statusCode="500" redirect="/Errors/Http500" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)

我的控制器非常简单,具有相应的正确命名视图:

public class ErrorsController : Controller
{
    public ActionResult Http403()
    {
        return View("Http403");
    }

    public ActionResult Http500()
    {
        return View("Http500");
    }
}
Run Code Online (Sandbox Code Playgroud)

为了测试,我在另一个控制器中抛出异常:

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

    public ActionResult ServerError()
    {
        throw new HttpException(500, "");
    }
}
Run Code Online (Sandbox Code Playgroud)

403工作 - 我被重定向到我的自定义"/错误/ Http403".

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

有任何想法吗?

Nic*_*ick 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>
Run Code Online (Sandbox Code Playgroud)

并从 global.asax 中删除这一行

GlobalFilters.Filters.Add(new HandleErrorAttribute());
Run Code Online (Sandbox Code Playgroud)

然而它并不完美,因为我试图检索最后一个始终为空的错误。

Server.GetLastError()
Run Code Online (Sandbox Code Playgroud)

请参阅/sf/answers/524958451/,了解有关 MVC3 中自定义错误的最全面的文章,我发现这很有帮助。