Asp.net mvc IIS显示服务器错误而不是自定义错误
我正在使用MVC5,我正在使用一个自定义的错误视图来处理我的错误,例如(404403..等等) 它在本地IIS上运行良好,但当我在登台服务器上发布时,它会显示有关这些错误代码的IIS服务器错误消息 它将显示以下消息:Asp.net mvc IIS显示服务器错误而不是自定义错误,asp.net-mvc,iis,server-error,Asp.net Mvc,Iis,Server Error,我正在使用MVC5,我正在使用一个自定义的错误视图来处理我的错误,例如(404403..等等) 它在本地IIS上运行良好,但当我在登台服务器上发布时,它会显示有关这些错误代码的IIS服务器错误消息 它将显示以下消息: public ActionResult Index(string id) { if (!string.IsNullOrEmpty(id) && id.Equals("404")) { Respo
public ActionResult Index(string id)
{
if (!string.IsNullOrEmpty(id) && id.Equals("404"))
{
Response.StatusCode = 404;
return !Request.IsAjaxRequest() ? (ActionResult)View("404") : PartialView("404");
}
if (!string.IsNullOrEmpty(id) && id.ToLower().Equals("403"))
{
Response.StatusCode = 403;
return !Request.IsAjaxRequest() ? (ActionResult)View("Security") : PartialView("Security");
}
return !Request.IsAjaxRequest() ? (ActionResult)View("Index") : PartialView("Index");
}
而不是:
public ActionResult Index(string id)
{
if (!string.IsNullOrEmpty(id) && id.Equals("404"))
{
Response.StatusCode = 404;
return !Request.IsAjaxRequest() ? (ActionResult)View("404") : PartialView("404");
}
if (!string.IsNullOrEmpty(id) && id.ToLower().Equals("403"))
{
Response.StatusCode = 403;
return !Request.IsAjaxRequest() ? (ActionResult)View("Security") : PartialView("Security");
}
return !Request.IsAjaxRequest() ? (ActionResult)View("Index") : PartialView("Index");
}
我已经修改了
Global.asax
if ((Context.Server.GetLastError() is UnauthorizedAccessException))
{
log.LogError(Context.Server.GetLastError().Message, Context.Server.GetLastError());
customErrorPage = @"~/Error/?id=403"; //security
}
else if ((Context.Server.GetLastError() is HttpException) && (((HttpException)Context.Server.GetLastError()).GetHttpCode() == 404))
{
//** Handle 404 error and response code
log.LogError("404", Context.Server.GetLastError());
customErrorPage = @"~/Error/?id=404";
}
else
{
log.LogError(Context.Server.GetLastError().Message, Context.Server.GetLastError());
customErrorPage = @"~/Error";
}
if (ConfigurationHelper.Common.ShowCustomErrorPage)
{
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
Response.Redirect(urlHelper.Content(customErrorPage), false);
Server.ClearError();
}
错误控制器:
public ActionResult Index(string id)
{
if (!string.IsNullOrEmpty(id) && id.Equals("404"))
{
Response.StatusCode = 404;
return !Request.IsAjaxRequest() ? (ActionResult)View("404") : PartialView("404");
}
if (!string.IsNullOrEmpty(id) && id.ToLower().Equals("403"))
{
Response.StatusCode = 403;
return !Request.IsAjaxRequest() ? (ActionResult)View("Security") : PartialView("Security");
}
return !Request.IsAjaxRequest() ? (ActionResult)View("Index") : PartialView("Index");
}
如何显示自定义错误消息?只需添加以下
web.config
配置即可通过IIS默认错误处理行为
<configuration>
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>
</configuration>
尝试使用
Response.TrySkipIisCustomErrors = true;
在你的控制器上。
这比那本书好
<httpErrors existingResponse="PassThrough" />
由于
传递
可能会导致一些您并不总是期望的结果。例如,阅读如果模块未设置任何文本,它将如何使自定义错误模块返回空白响应。这非常有效,但它将完全删除IIS 404级错误处理。如果您有一个未由ASP.NET引擎处理的URL,它将不会返回404未找到错误。