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