我的控制器上有以下HandleError过滤器:
[HandleError(ExceptionType = typeof(ArgumentException), View = "DestinationError")]
我已经设置了Web.Config,以便启用customErrors。我遇到的问题是HandleError过滤器工作正常,当我从Visual Studio本地运行应用程序时,但当我将它部署到服务器时,我得到的是500内部服务器错误,表明错误视图不能是找到。
之前有没有人遇到过这种情况,我怀疑路由可能是问题的根本原因(hoho)。该站点部署到Web根目录中,而不是部署到wwwroot本身,因此IIS可能无法找到错误文件。
答案 0 :(得分:3)
要回答我自己的问题,神奇的是关闭IIS中的HTTP错误。我对这种解决方法并不满意,所以如果有人有更好的想法,我很乐意听到它们。
答案 1 :(得分: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");
}
}
答案 2 :(得分:0)
如果您尝试以下操作该怎么办?
Response.TrySkipIisCustomErrors = true;
答案 3 :(得分:0)
迁移到MVC 3 RC后我遇到了同样的问题。通过添加布局/母版页来管理它。
@inherits System.Web.Mvc.WebViewPage<System.Web.Mvc.HandleErrorInfo>
@{
View.Title = "Error";
Layout = "~/Views/Shared/_Layout.cshtml";
}
现在内部服务器错误消失了,但我认为这是某个地方的错误。