我正在我的 MVC3 应用程序中实现自定义错误,它在 web.config 中打开:
<customErrors mode="On">
<error statusCode="403" redirect="/Errors/Http403" />
<error statusCode="500" redirect="/Errors/Http500" />
</customErrors>
我的 Controller 非常简单,具有相应的正确命名的 View :
public class ErrorsController : Controller
{
public ActionResult Http403()
{
return View("Http403");
}
public ActionResult Http500()
{
return View("Http500");
}
}
为了测试,我在另一个 Controller 中抛出异常:
public class ThrowingController : Controller
{
public ActionResult NotAuthorised()
{
throw new HttpException(403, "");
}
public ActionResult ServerError()
{
throw new HttpException(500, "");
}
}
403 有效 - 我被重定向到我的自定义“/Errors/Http403”。
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>
并从 global.asax 中删除这一行
GlobalFilters.Filters.Add(new HandleErrorAttribute());
但是它并不完美,因为我正在尝试检索最后一个始终为空的错误。
Server.GetLastError()
参见https://stackoverflow.com/a/7499406/1048369我发现关于 MVC3 中自定义错误的最全面的文章很有帮助。
关于asp.net-mvc-3 - 自定义错误适用于 HttpCode 403 但不适用于 500?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10248700/