繁体   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