我有一个MVC3的网站,我试图让404个错误页面正确显示。我知道了所有的设置,它ASP.NET站点自定义404错误阻止服务器错误
- 不重定向的URL,
- 返回头实际的404错误状态,
- 登录的网址,
- 是一个自定义的页面我已经创建,
- 和是一个实际的动作/控制页,而不是一个的.aspx/html的页面。
调试在Visual Studio中,它完美的作品。当我将它发布到我的测试或生产环境中时,它不起作用,并返回一个通用文件,该文件在标题中找不到404状态。
错误页面不是默认的404错误(this或this),但似乎是服务器本身的全局自定义(服务器托管多个站点,所有404都显示相同的简单线路页面)。服务器上的错误页面实际上显示一个500错误页面。另外,我已经设置了Response.TrySkipIisCustomErrors = true来尝试绕过它,但这不起作用。
在生产和测试服务器,它被正确记录,如果我有它不会返回404状态码,它显示我的错误页面。因此,我很确定这个动作/视图正在工作,但它对于服务器来说是某种程度上的。它的运行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
{
//
}
}
代码中的错误控制器
public ActionResult NotFound()
{
try
{
Response.StatusCode = (int)HttpStatusCode.NotFound;
Response.TrySkipIisCustomErrors = true;
}
catch
{}
return View();
}
我已经有了这个设置,但它不工作。在本地调试时,如果我摆脱了我的全局application_error函数,它不会执行任何操作并显示默认的[YSOD 404错误](http://static.colinmackay.co.uk/images/mvc/2011-05- 13-Step-4-Resource-not-found-ysod.png),并且在服务器上它显示服务器上404一直出现的错误。我相信这是实际服务器的自定义404错误。 – Helba 2012-07-13 14:23:41
正如旁注:确保你的404路径是正确的。我遇到了一个问题,我把我的路径搞砸了,它默认回到其他404(我的404正在抛出404的哈哈),所以我认为这个解决方案不起作用。请仔细检查一下。 – Saedeas 2012-07-13 14:31:13
我已经加倍检查,因为知道我,我会输错它。但它是正确的路径(复制/粘贴和在本地工作,但在测试环境中不起作用)我可能会看到是否可以联系系统管理员以查看它是否已启用,但[如本网站所示](http:// tedgustaf.com/en/blog/2011/5/custom-404-and-error-pages-for-asp-net-and-static-files/) – Helba 2012-07-13 14:38:45