簡體   English   中英

ASP.NET MVC如何在不重寫URL的情況下處理Application_Error的404錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM