欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

ASP.NETMVC下自定義錯誤頁和展示錯誤頁的示例分析-創(chuàng)新互聯(lián)

小編給大家分享一下ASP.NET MVC下自定義錯誤頁和展示錯誤頁的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

十載的薛城網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整薛城建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“薛城網(wǎng)站設計”,“薛城網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

在網(wǎng)站運行中,錯誤是不可避免的,錯誤頁的產生也是不可缺少的。

這幾天看了博友的很多文章,自己想總結下我從中學到的和實際中配置的。

首先,需要知道產生錯誤頁的來源,一種是我們的.NET平臺拋出的,一種是網(wǎng)站所依賴的宿主拋出的,一般來講我們所依賴的宿主就是IIS了。

IIS中的錯誤頁入口:

ASP.NET MVC下自定義錯誤頁和展示錯誤頁的示例分析

其中的錯誤碼想必并不陌生

ASP.NET MVC下自定義錯誤頁和展示錯誤頁的示例分析

這里是在服務器上找不到所需資源時拋出的錯誤頁,在這里可以設置需要展示的錯誤頁面,只需將預定的錯誤頁面加入服務器中,然后在指定狀態(tài)碼下配置路徑即可。

這是請求在IIS中時,還未完全進入到asp.net mvc中,這里需要理解什么是未完全進入,IIS7+的版本中,不依賴于請求路徑末尾的標識信息,利用mvc中的urlRoutingModule進行處理,在我們配置mvc的路由時,首先的第一條:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

便是隔離非mvc內部的使用文件,如果請求的只是服務器上的文件,那么路由便會在這里進行過濾,使之不匹配具體路由信息。

也就只是和mvc打了個招呼 然后就走了,沒有進入mvc中搞事情。

第二種是,進入了asp.net mvc的管轄范圍,然后在其中出錯了,便是跳到我們在程序中配置的錯誤頁了。

首先講講我從博友那里學到的、看到的幾種方式。

第一種是在web.config中通過customError配置。

<customErrors mode="On" defaultRedirect="~/Error/ErrorPage">
   <error statusCode="404" redirect="~/Error/ErrorPage404" />
</customErrors>

但是這種方式不怎么令人接受,太過于簡單,沒有一點異常信息,并且有時候還不能起效果,我不太喜歡這種方式。

這種是用框架封裝好的,利用的是將要說的第三種的強大方式實現(xiàn)的,當有異常發(fā)生又沒得捕獲時,最終利用的第三種方式自動實現(xiàn)。

第二種是利用HandlerErrorAttribute 特性,利用AOP的方式,當有異常出現(xiàn)時,便會進入具體實現(xiàn)了這個特性的,且被注冊了的ExceptionAttribute職責中。

namespace SAssassin.Web.Core.Filter
{
  /// <summary>
  /// 異常處理之日志記載采用消息隊列方式
  /// </summary>
  public class MyExceptionAttribute : HandleErrorAttribute
  {
    public static Queue<Exception> ExceptionQueue = new Queue<Exception>();
    public override void OnException(ExceptionContext filterContext)
    {
      ExceptionQueue.Enqueue(filterContext.Exception);
      filterContext.HttpContext.Response.Redirect("~/ErrorPage/CustomErrorPage");
      base.OnException(filterContext);
    }
  }
}

在這里,我可以得到異常信息,也可以解析具體的異常報錯原因,比如404,500...  可以通過這種形勢,將其轉移到不同的自定義錯誤頁面上,此處我增加了一個控制器

CustomErrorPageController,專門用來存放錯誤頁面,原有的Shared下的Error.cshtml錯誤頁面也仍然存在著。

我比較喜歡這種方式,一來可以看到異常信息,而來可以設計需要跳轉的錯誤頁面。

第三種方式也是最強大的、俗稱"最后一道防線",從全局層面去捕捉異常的Application_Error

當網(wǎng)站初次啟動時,會執(zhí)行一個特殊的動作,Application_start 首先執(zhí)行,也只初始化一次。這個也是Application 中的事件。

//
    // 摘要:
    //   ASP.NET 將 HTTP 標頭發(fā)送到客戶端之前發(fā)生。
    public event EventHandler PreSendRequestHeaders;
    //
    // 摘要:
    //   在選擇該處理程序對請求作出響應時發(fā)生。
    public event EventHandler MapRequestHandler;
    //
    // 摘要:
    //   釋放應用程序時發(fā)生。
    public event EventHandler Disposed;
    //
    // 摘要:
    //   作為執(zhí)行的 HTTP 管道鏈中的第一個事件發(fā)生,當 ASP.NET 的請求做出響應。
    public event EventHandler BeginRequest;
    //
    // 摘要:
    //   當安全模塊已建立的用戶標識時出現(xiàn)。
    public event EventHandler AuthenticateRequest;
    //
    // 摘要:
    //   當安全模塊已建立的用戶標識時出現(xiàn)。
    public event EventHandler PostAuthenticateRequest;
    //
    // 摘要:
    //   安全模塊已驗證用戶身份驗證時發(fā)生。
    public event EventHandler AuthorizeRequest;
    //
    // 摘要:
    //   當前請求的用戶已被授權時發(fā)生。
    public event EventHandler PostAuthorizeRequest;
    //
    // 摘要:
    //   當 ASP.NET 完成授權事件以便從緩存中,跳過的事件處理程序 (例如,一個頁面或 XML Web 服務) 執(zhí)行的請求提供服務的緩存模塊時發(fā)生。
    public event EventHandler ResolveRequestCache;
    //
    // 摘要:
    //   ASP.NET 將繞過當前事件處理程序的執(zhí)行,并允許緩存模塊以處理從緩存請求時發(fā)生。
    public event EventHandler PostResolveRequestCache;
    //
    // 摘要:
    //   ASP.NET 將內容發(fā)送到客戶端之前發(fā)生。
    public event EventHandler PreSendRequestContent;
    //
    // 摘要:
    //   當 ASP.NET 已映射到相應的事件處理程序的當前請求時出現(xiàn)。
    public event EventHandler PostMapRequestHandler;
    //
    // 摘要:
    //   當 ASP.NET 已完成處理的事件處理程序時發(fā)生 System.Web.HttpApplication.LogRequest 事件。
    public event EventHandler PostLogRequest;
    //
    // 摘要:
    //   已釋放與請求相關聯(lián)的托管的對象時發(fā)生。
    public event EventHandler RequestCompleted;
    //
    // 摘要:
    //   獲取與當前的請求相關聯(lián)的請求狀態(tài) (例如,會話狀態(tài)) 時發(fā)生。
    public event EventHandler PostAcquireRequestState;
    //
    // 摘要:
    //   ASP.NET 開始執(zhí)行事件處理程序 (例如,一個頁面或 XML Web 服務) 之前發(fā)生。
    public event EventHandler PreRequestHandlerExecute;
    //
    // 摘要:
    //   當 ASP.NET 事件處理程序 (例如,一個頁面或 XML Web 服務) 完成執(zhí)行時發(fā)生。
    public event EventHandler PostRequestHandlerExecute;
    //
    // 摘要:
    //   ASP.NET 完成執(zhí)行所有請求事件處理程序后發(fā)生。 此事件會導致狀態(tài)模塊保存當前的狀態(tài)數(shù)據(jù)。
    public event EventHandler ReleaseRequestState;
    //
    // 摘要:
    //   當 ASP.NET 已完成執(zhí)行所有請求事件處理程序和存儲數(shù)據(jù)的請求狀態(tài)時發(fā)生。
    public event EventHandler PostReleaseRequestState;
    //
    // 摘要:
    //   當 ASP.NET 完成執(zhí)行事件處理程序,以便讓緩存模塊存儲將用于為從緩存中的后續(xù)請求提供服務的響應時發(fā)生。
    public event EventHandler UpdateRequestCache;
    //
    // 摘要:
    //   當 ASP.NET 完成更新的緩存模塊和存儲用于為從緩存中的后續(xù)請求提供服務的響應時發(fā)生。
    public event EventHandler PostUpdateRequestCache;
    //
    // 摘要:
    //   ASP.NET 執(zhí)行當前請求的任何日志記錄之前發(fā)生。
    public event EventHandler LogRequest;
    //
    // 摘要:
    //   當 ASP.NET 獲取與當前的請求相關聯(lián)的當前狀態(tài) (例如,會話狀態(tài))。
    public event EventHandler AcquireRequestState;
    //
    // 摘要:
    //   作為執(zhí)行的 HTTP 管道鏈中的最后一個事件發(fā)生,當 ASP.NET 的請求做出響應。
    public event EventHandler EndRequest;
    //
    // 摘要:
    //   當引發(fā)未處理的異常時發(fā)生。
    public event EventHandler Error;

看到最后一個事件,當引發(fā)未處理的異常時發(fā)生,便是最后一道防線登場了。如果沒有用aop的方式捕捉異常,那么就是Application _Error登場了。

在Global.asax中我們可以寫上這個方法

/// <summary>
    /// 可以完成全局異常處理
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Application_Error(object sender, EventArgs e)
    {
      // 在出現(xiàn)未處理的錯誤時運行的代碼
      var error = Server.GetLastError();
      var code = (error is HttpException) ? (error as HttpException).GetHttpCode() : 500;

      //如果不是HttpException記錄錯誤信息
      if (code != 404)
      {
        //此處郵件或日志記錄錯誤信息
      }

      Response.Write("出錯");
      Server.ClearError();

      string path = Request.Path;
      Context.RewritePath(string.Format("~/Errors/Http{0}", code), false);
      IHttpHandler httpHandler = new MvcHttpHandler();
      httpHandler.ProcessRequest(Context);
      Context.RewritePath(path, false);
    }

這個方法中,我們也可以得到異常信息,記錄日志或是郵件通知,

同樣可以根據(jù)錯誤碼進行相應的跳轉錯誤頁面。

也可以在當前錯誤頁面中添加額外的信息。

很是強大。

如果沒有寫這個方法,則利用框架封裝的默認方法。當在web.config中配置了customError節(jié)點時,便是這個方法來幫忙處理。

以上是“ASP.NET MVC下自定義錯誤頁和展示錯誤頁的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章標題:ASP.NETMVC下自定義錯誤頁和展示錯誤頁的示例分析-創(chuàng)新互聯(lián)
標題URL:http://aaarwkj.com/article42/dsjiec.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、移動網(wǎng)站建設網(wǎng)站改版、App設計、面包屑導航、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設
日韩黄色免费在线观看| 亚洲欧美国产在线日韩| 久久国产精品av在线观看| 国产91人妻精品一区二区三区| 校园春色亚洲欧美日韩| 国产91精品系列在线观看| 在线麻豆国产传媒免费| 久久久久久精品国产毛片| 亚洲黄香蕉视频免费看| 日韩欧美午夜福利在线视频| 欧美av一区二区三区四区| 欧美黄片在线免费观看视频 | 三级久久三级久久三级| 91久久精品国产一区| 国产一边打电话一边操| 在线中文字幕av电影| 18禁黄久久久一区二区三区| 亚洲精品日韩一区二区| 国产怡红院在线视频观看| 国产日韩精品免费在线| 99热这里只有精品最新| 伦理中文字幕一区二区| 国产精品av在线网站| 日本一区二区最新免费| 欧美日韩国产精品乱人伦| 内射嫩国产欧美国产日韩欧美| 亚洲黄片在线免费播放观看| 午夜少妇伦理一区二区| 欧美精品福利一区二区三区| 国产夫妻一区二区三区| 日本不卡一区二区在线观看| 黄色av链接在线观看| 粉嫩在线一区二区懂色| 熟女人妻精品一二三四| 成人午夜三级在线观看| 日本91大神在线观看| 欧美日本道一区二区三区| 中文日韩av在线免费播放| 黄色污网站在线观看免费| 亚洲日本成人av在线观看 | 日本加勒比高清在线播放|