我有一个MVC3网站,并且正在尝试使404错误页面正确显示。我已经准备好了
在Visual Studio中进行调试,可以完美运行。当我将其发布到测试或生产环境时,它不起作用,并返回在标题中找不到404状态的通用文件。
错误页面不是默认的404错误(this或this),但似乎是服务器本身的全局自定义(服务器托管多个站点,所有404都显示相同的简单行页面)。服务器上的错误页面实际上显示了500错误页面。另外,我将Response.TrySkipIisCustomErrors = true设置为尝试绕过它,但这不起作用。
在生产和测试服务器上,它已正确记录,并且如果我没有返回404状态代码,它将显示我的错误页面。因此,我可以肯定操作/ View 可以正常工作,但是服务器可以通过某种方式实现。它正在运行ASP.NET 4和IIS 7。
关于解决此问题的方式/地点的任何建议?
。
到目前为止,我的解决方案都基于
How can I properly handle 404 in ASP.NET MVC?
这是我通过捕获Application_Error中的异常所做的工作的基础;我对此仍然有所警惕,因为它很容易导致循环,所以我尝试/捕获了所有内容以防止发生这种情况(错误发生在捕获另一个错误中)
global.asax中的代码
protected void Application_Error(object sender, EventArgs e)
{
try
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
if (httpException == null)
{
routeData.Values.Add("action", "NotFound");
}
else
{
switch (httpException.GetHttpCode())
{
case 404:
// Page not found.
routeData.Values.Add("action", "NotFound");
break;
case 500:
// Server error.
routeData.Values.Add("action", "ServerError");
break;
default:
routeData.Values.Add("action", "General");
break;
}
}
routeData.Values.Add("error", exception);
Server.ClearError();
Response.TrySkipIisCustomErrors = true;
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(
new HttpContextWrapper(Context), routeData));
}
catch
{
//
}
}
错误 Controller 中的代码
public ActionResult NotFound()
{
try
{
Response.StatusCode = (int)HttpStatusCode.NotFound;
Response.TrySkipIisCustomErrors = true;
}
catch
{}
return View();
}
最佳答案
我遇到过同样的问题。应该修改web.config文件。
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/Errors/404" />
</httpErrors>
</system.webServer>
用自定义错误页面的路径替换/Errors/404。
关于asp.net - ASP.NET网站自定义404错误被服务器错误阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11461812/