我有一個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