网站首页 文章专栏 ASP.NET MVC自定义错误页(404、500)
ASP.NET MVC自定义错误页
编辑时间:2017-03-15 23:14 作者:Absolutely 浏览:974 评论:4

HTTP常见的错误码就是404、500、503了。

    404(未找到)服务器找不到请求的网页。

    500(服务器内部错误)服务器发生错误,无法完成响应请求。

    503(服务不可用)服务器目前无法使用。


该篇主要将ASP.NET(包括MVC)中如何自定义错误页,主要以404为例,因为它还涉及到SEO,比较重要!


产生404的原因主要有以下:

    1.浏览器和爬虫:某些浏览器会请求网站的favicon.ico,而如果你的网站根目录下没有这个文件,那么浏览器会有一条404的log,同样搜索引擎会请求robots.txt。但这个影响不大。

    2.用户输入了错误URL:某些用户不小心在浏览器地址栏加了一个字符或者删除了一个字符,导致服务器找不到请求的路径。

    3.某些网站引用的地址过老:某个页面已经被删除,而其他网站依然引用,他人点击的时候服务器找不到请求的路径。


ASP.NET中指定错误跳转的方式有三种:

    1.在Application_Error方法中对不同HTTP状态做不同的跳转

    2.web.config中配置customErrors节点(对应IIS中ASP.NET错误页)

    3.web.config中配置httpErrors节点(对应IIS中IIS错误页)


一、Application_Error方法


HttpException ev = HttpContext.Current.Server.GetLastError() as HttpException;
    if (ev != null)
    {
        if (ev.GetHttpCode() == 404)
        {
            Response.Redirect("/ErrorPage/404.html");
            Response.End();
            Server.ClearError();
        }
        else
        {
            //记录日志
            LogHelper.Error(ev.Message);
        }
    }

在Application_Error方法中捕获404,然后重定向到自己做好的404页面!这是最单纯的做法,不用多说(博主一开始就这样,下篇会讲这样的弊端)


二、customErrors(ASP.NET自定义错误)

<system.web>
    <customErrors mode="On" defaultRedirect="" redirectMode="ResponseRedirect">
      <error statusCode="404" redirect="/ErrorPage/404.html"/>
    </customErrors>
 </system.web>
这个是ASP.NET的自定义异常,mode是自定义异常的模式(开启、关闭、远程时开启),defaultRedirect是默认的重定向地址,redirectMode是重定向模式。(这种方法我倒是没试过)



三、httpErrors(IIS自定义错误)

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="500" subStatusCode="-1" />
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" prefixLanguageFilePath="" path="/ErrorPage/NotFound" responseMode="ExecuteURL" />
    <error statusCode="500" prefixLanguageFilePath="" path="/ErrorPage/InternalServerError" responseMode="ExecuteURL" />
  </httpErrors>
</system.webServer>


这个是IIS的自定义异常,errorMode是模式(自定义、详细,本地时详细),existingResponse这个属性可以决定是由ASP.NET来抛出异常还是IIS来抛出异常:

    Auto:默认;

    Replace:强制使用IIS;

    PassThrough:不使用IIS(也就是ASP.NET);

error子节点中,responseMode指定响应模式(文件、相对路径、重定向),path则是对应模式下的路径。


以上三种方法均可以实现自定义错误跳转。




下篇预告:ASP.NET MVC制作404跳转(非302与200)


    出自:不落阁

    地址:www.lyblogs.cn

    转载请注明出处!


来说两句吧
最新评论
  • 有毒的地狱野猪肉
    有毒的地狱野猪肉 2018-01-07 20:43:47
    看看
  • Jacky Linゞ
    Jacky Linゞ 2017-03-16 09:49:32
    后台条件没有重置下拉,选择后要刷新页面重置条件 
  • Jacky Linゞ
    Jacky Linゞ 2017-03-16 23:55:34

    @Absolutely @无效,那个查询条件下拉加个重置按钮,其实没什么的[微笑]

  • Jacky Linゞ
    Jacky Linゞ 2017-03-16 23:56:22
    什么时候开源前端html模板啊.期待期待,很漂亮设计的