你的位置:首页 > ASP.net教程

[ASP.net教程]asp.net中mvc4.0下404页面设置


当我们的页面不存在或者出现错误的时候需要展示404页面,以保证有较好的用户体验效果以及更好的SEO。

那么再MVC中怎样展示404页面的呢?

当然这里不是我们访问一个错误地址或者页面出错后链接跳转到www.xxx.com/404.html页面,而是在错误的页面或者链接不变的前提下,页面内容展示404,并且要求页面状态也是404。

首先我们先创建一个MVC项目,既然是404,我们首先需要一个404.html的页面放在根目录下即可。

环境:VS2010,.NET Framework 4.0,MCV4,IIS7,WinServer2008 R2 Ent

如下:

然后再IIS中配置站点,如果现在我们不做任何的404处理,访问一个不存在的路径会出现如下错误

当出现这种错误我们首先想到的是去IIS和Web.config中去设置。在这里我们用另一种方法去实现404。

既然出错了,那我们怎么能获得到错误呢,当然是Global.asax(这里我就不再复述程序管道生命周期等一些问题了)中的Application_Error了。

既然页面地址不能变,还要展示404页面内容,那我们就在Application_Error中做手脚。

在Global.asax添加如下代码

protected void Application_Error()
{
string path404 = System.Web.HttpContext.Current.Server.MapPath("/404.html");
StreamReader sr = new StreamReader(path404, System.Text.Encoding.UTF8);
string content = sr.ReadToEnd().ToString();//读取404.html页面内容
sr.Close();
HttpContext.Current.Response.StatusCode = 404;//设置页面状态
HttpContext.Current.Response.Write(content);//输出404页面内容
HttpContext.Current.Response.End();
HttpContext.Current.Response.Clear();
}

编译再次访问

OK,是我们想要的效果,地址不变,页面展示404内容,状态码也是404。

这时我们很happy的上传到服务器中(我这里先放在公司内网测试服务器中winserver 2008 r2+iis7),并在iis配置站点后访问,问题来了。

当我们再服务器中配置好IIS站点后访问一个错误地址会显示如下页面:

为什么会跳转到IIS默认的404页面呢,我们明明在Global.asax中程序处理了啊?

我们先去IIS中去看一下404错误页设置

我们发现IIS中他默认设置了404错误页的制定路径地址。这个错误地址再C盘C:\inetpub\custerr\zh-CN,打开文件夹你会发现,I所有的页面状态相应的页面都在这个文件夹中。

那我们是不是把路径修改了就可以了?再这里我们不要去修改,也不用把我们自定义的404.html放在这个目录中。下面我们怎么做呢?还是在C盘中C:\inetpub\temp\appPools目录中(这里面是我们在IIS中配置的所有站点的应用程序池的配置文件)打开,你会发现再这个文件夹中会有所有和你在IIS中配置的站点名称一致的文件夹,我们接着打开,里面会有一个和站点名一致的.config文件。或许会需要管理员身份,如果打不开,就复制到其他地方,比如桌面。这个时候再打开config文件。你会找到如下节点配置

这个时候我们把404节点修改为<error statusCode="404" prefixLanguageFilePath="F:\test404\test404" path="404.html" responseMode="File"/>。path为你项目中404.html所在的绝对路径。

修改完成后然后替换原来的.config文件。再次访问错误地址,又会出现如下页面:

还是不行,接下来在根目录中手动创建zh-CN文件夹,把根目录中的404.html文件拷贝进入。

生成再次访问就会展示正确的404页面,错误地址不变,F12查看状态也是404。

至此404页面配置完毕。

有时间我会更新如何再.netCore中配置404页面。

 原文地址:http://www.cnblogs.com/liujinxin/p/6077717.html