我有一个MVC3网站,我正在尝试正确显示404错误页面 . 我已经把它全部设置好了
-
不重定向网址,
-
在 Headers 中返回实际的404错误状态,
-
记录URL,
-
是我创建的自定义页面,
-
并且是实际的操作/控制器页面而不是.aspx / .html页面 .
在Visual Studio中进行调试,它完美地运行 . 当我将其发布到我的测试或 生产环境 环境时,它不起作用并返回 Headers 中未找到404状态的通用文件 .
错误页面不是默认的404错误(this也不是this),但似乎是服务器本身的全局自定义(服务器托管多个站点,所有404显示相同的简单行页面) . 服务器上的错误页面实际显示500错误页面 . 而且,我've set Response.TrySkipIisCustomErrors = true to try to bypass it, but that doesn'吨工作 .
在 生产环境 和测试服务器上,它正在正确记录,如果我没有返回404状态代码,它将显示我的错误页面 . 因此,我非常确定动作/视图是否有效,但它与服务器有某种关系 . 它运行的是ASP.NET 4和IIS 7 .
有什么/哪里调查解决这个问题的建议?
.
Resources of code I've based my solution thus far on
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
{
//
}
}
错误控制器中的代码
public ActionResult NotFound()
{
try
{
Response.StatusCode = (int)HttpStatusCode.NotFound;
Response.TrySkipIisCustomErrors = true;
}
catch
{}
return View();
}
2 回答
我遇到过同样的问题 . 应修改web.config文件 .
将/ Errors / 404替换为自定义错误页面的路径 .
您是否将
TrySkipIisCustomErrors
指定为true
?检查here .