ASP.Net MVC HandleError引发500内部服务器错误

时间:2008-12-10 12:05:20

标签: asp.net-mvc handleerror

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

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

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

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

4 个答案:

答案 0 :(得分:3)

否则,您可以使用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");
    }
}

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

@inherits System.Web.Mvc.WebViewPage<System.Web.Mvc.HandleErrorInfo>

@{
    View.Title = "Error";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

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

答案 3 :(得分:0)

如果您尝试以下操作该怎么办?

Response.TrySkipIisCustomErrors = true;
寻找你感兴趣的贴纸↓↓↓
豫ICP备18024241号-1