[英]ASP.NET MVC how to handle 404 error from Application_Error without rewriting the URL
我創建了一個非常簡單的ASP.NET MVC 5應用程序,在該應用程序中我想處理Application_Error
的404異常,如本問題和其他答案所示 。 但是,當我嘗試訪問不存在的頁面(並希望顯示404頁面)時,自定義錯誤頁面的源代碼將以純文本顯示! 。
我不希望我的網址像這篇文章一樣被重寫
我的項目非常簡單。 我剛剛ASP.NET WebApplication with Razor
將其添加到基本的ASP.NET WebApplication with Razor
:
ErrorsController.cs
Http404.cshtml
Global.asax
如下所示:
項目組織:
Global.asax中:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{}
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
HttpException httpException = exception as HttpException;
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Errors");
if (httpException == null)
{
routeData.Values.Add("action", "Index");
}
else
{
switch (httpException.GetHttpCode())
{
case 404:
routeData.Values.Add("action", "Http404");
break;
}
}
Response.Clear();
Server.ClearError();
Response.TrySkipIisCustomErrors = true;
IController errorController = new ErrorsController();
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
}
ErrorsController.cs:
public class ErrorsController : Controller
{
public ActionResult Http404(string url)
{
return View("Http404");
}
}
Http404.cshtml
@{
ViewBag.Title = "Page not found";
}
<h2>Page not found</h2>
但是,當我嘗試到達一個不存在的頁面時,我看到的是我的404頁面的源代碼: 不存在的頁面的輸出:
我在stackoverflow和其他站點中搜索了幾個小時,但沒有任何幫助。
有些人使用非常相似的代碼來處理404異常,但結果卻不同。 我真的很堅持這一點,希望有人可以幫助我,或者至少向我展示一種比此答案更好的方法來處理ASP.NET MVC 5中的404異常。
如果瀏覽器中包含純文本html,則可能意味着標頭中的Content-Type
值錯誤。
嘗試這個 :
Response.ContentType = "text/html";
它當然不是最好的解決方案,但它可以工作。
魯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.