【问题标题】:ASP.Net MVC HandleError throwing 500 Internal Server ErrorASP.Net MVC HandleError 抛出 500 内部服务器错误
【发布时间】:2008-12-10 12:05:20
【问题描述】:

我的控制器上有以下 HandleError 过滤器:

[HandleError(ExceptionType = typeof(ArgumentException), View = "DestinationError")]

我已经设置了 Web.Config,以便启用 customErrors。我遇到的问题是 HandleError 过滤器工作正常,当我在 Visual Studio 本地运行应用程序时,但是当我将它部署到服务器时,我得到的只是 500 内部服务器错误,表明错误视图不能找到了。

以前有没有人遇到过这种情况,我怀疑路由可能是问题的根本原因(hoho)。该站点被部署到 web 根目录中,而不是 wwwroot 本身,因此 IIS 可能无法找到错误文件。

【问题讨论】:

    标签: asp.net-mvc handleerror


    【解决方案1】:

    要回答我自己的问题,神奇的是关闭 IIS 中的 HTTP 错误。我对这种解决方法不满意,所以如果有人有更好的想法,我很想听听。

    【讨论】:

      【解决方案2】:

      否则,您可以使用 Web.Config 配置并将其设置为预期控制器的操作。 像这样:

          <customErrors mode="On" defaultRedirect="/Error">
              <error statusCode="404" redirect="/Error/NotFound"/>
          </customErrors>
      

      然后假设您有一个错误控制器 (/Error),它指向一个索引操作

      public class ErrorController : Controller
      {
          [AcceptVerbs(HttpVerbs.Get)]
          public ActionResult Index()
          {
              Response.StatusCode = (int)HttpStatusCode.InternalServerError;
              return View("Index");
          }
      
          [AcceptVerbs(HttpVerbs.Get)]
          public ActionResult NotFound()
          {
              Response.StatusCode = (int)HttpStatusCode.NotFound;
              return View("NotFound");
          }
      }
      

      【讨论】:

        【解决方案3】:

        如果您尝试以下方法会怎样?

        Response.TrySkipIisCustomErrors = true;
        

        【讨论】:

          【解决方案4】:

          迁移到 MVC 3 RC 后我遇到了同样的问题。通过添加布局/母版页设法绕过它。

          @inherits System.Web.Mvc.WebViewPage<System.Web.Mvc.HandleErrorInfo>
          
          @{
              View.Title = "Error";
              Layout = "~/Views/Shared/_Layout.cshtml";
          }
          

          现在内部服务器错误消失了,但我认为这是某个地方的错误。

          【讨论】: