<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Contact Manager Web API 示例[4] 異常處理(Exception Handling)

      聯系人管理器web API是一個Asp.net web api示例程序,演示了通過ASP.NET Web API 公開聯系信息,并允許您添加和刪除聯系人,示例地址http://code.msdn.microsoft.com/Contact-Manager-Web-API-0e8e373d

      Contact Manager Web API 示例[1]CRUD 操作 已經做了一個基本的介紹,

      Contact Manager Web API 示例[2] Web API Routing 介紹Web API Routing。

      Contact Manager Web API 示例[3] 分頁和查詢(Paging and Querying)主要介紹OData的查詢和分頁支持。

      本文主要介紹WebAPI的異常處理HttpResponseMessage。

      如果 Web API 的 controller 擲出一個異常(exception),會發生什么事?默認下,最常是會把例外轉譯為一個 HTTP 狀態代碼 500 (Internal Server Error) 回應。

      HttpResponseException 類 是一個特別情況。能夠構建回應的信息, 這個例外能回傳任何 HTTP 狀態代碼。例如,下面例子,如果 id 參數不存在,會回傳 404 (Not Found) 狀態代碼。

      public HttpResponseMessage<Contact> Get(int id)
              {
                  var contact = this.repository.Get(id);
                  if (contact == null)
                  {
                      var response = new HttpResponseMessage();
                      response.StatusCode = HttpStatusCode.NotFound;
                      response.Content = new StringContent("Contact not found");
                      throw new HttpResponseException(response);
                  }
                  var contactResponse = new HttpResponseMessage<Contact>(contact);

                  //set it to expire in 5 minutes
                  contactResponse.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddSeconds(30));
                  return contactResponse;
              }

      異常過濾 (EXCEPTION FILTERS)

      你可以通過編寫 異常過濾(Exception Filter)來自己處理 Web API 的異常。當一個 controller 方法拋出任何未處理的例外,它并不是 HttpResponseException 異常,異常過濾被會執行。HttpResponseException 型別是一種特別情況,因為它是特別設計來回傳 HTTP 響應。

      異常過濾實現 System.Web.Http.Filters.IExceptionFilter 接口。不管如何,只需要繼承 System.Web.Http.Filters.ExceptionFilterAttribute 然后重寫(override) OnException 方法。

      namespace ContactManager.Filters
      {
          public class LogExceptionFilter : ExceptionFilterAttribute
          {
              public override void OnException(HttpActionExecutedContext actionExecutedContext)
              {
                  //增加二行 Trace 代碼

                  Trace.TraceError("異常: {0}", actionExecutedContext.Exception.Message);
                  Trace.TraceError("請求 URI: {0}", actionExecutedContext.Request.RequestUri);

                  base.OnException(actionExecutedContext);
              }
          }
      }

      你也能自行控制 HTTP 響應讓 Client 接收。在 HttpActionExecutedContext 參數 去修改或設置 Result 屬性。我們新增一個 NotImplExceptionFilter 類別,一樣繼承 ExceptionFilterAttribute 類和重寫 OnException 方法。

      namespace ContactManager.Filters
      {
          public class NotImplExceptionFilter : ExceptionFilterAttribute
          {
              public override void OnException(HttpActionExecutedContext actionExecutedContext)
              {
                  //增加二行 Trace 代碼

                  Trace.TraceError("異常: {0}", actionExecutedContext.Exception.Message);
                  Trace.TraceError("請求 URI: {0}", actionExecutedContext.Request.RequestUri);

                  if(actionExecutedContext.Result==null)
                  {
                      actionExecutedContext.Result = new  HttpResponseMessage();

                  }
                  //HttpStatusCode.NotImplemented = 501 
                  actionExecutedContext.Result.StatusCode = HttpStatusCode.NotImplemented ;
                  actionExecutedContext.Result.Content = new StringContent("方法未執行");

                  base.OnException(actionExecutedContext);
              }
          }
      }

      注冊異常過濾

      有二種方法可以去注冊異常過濾。

      第一,你可以注冊到全局的 GlobalConfiguration.Configuration.Filters 集合。當發生未處理的異常,異常過濾集合中會作用在所有 Web API controller action。(異常類型 HttpResponseException 也會被執行)。我們必須在 Global.asax 文件的 Application_Start 注冊它。

      public static void RegisterApis(HttpConfiguration config)
      {
         ……

          config.Filters.Add(new LogExceptionFilter());

      }

       

      protected void Application_Start()
      {
               RegisterApis(GlobalConfiguration.Configuration);
      }

      第二,你可以注冊異常過濾至指定的 action 方法,通過指定屬性的方式。例如以下范例:

              [HttpGet]
              [NotImplExceptionFilter]
              public HttpResponseMessage<Contact> Get(int id)
              {
                  var contact = this.repository.Get(id);
                  if (contact == null)
                  {
                      //var response = new HttpResponseMessage();
                      //response.StatusCode = HttpStatusCode.NotFound;
                      //response.Content = new StringContent("Contact not found");
                      //throw new HttpResponseException(response);
                      throw new NotImplementedException("此方法未執行");
                  }
                  var contactResponse = new HttpResponseMessage<Contact>(contact);

                  //set it to expire in 5 minutes
                  contactResponse.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddSeconds(30));
                  return contactResponse;
              }

      異常過濾在 ASP.NET Web API 與 ASP.NET MVC 類似。不管如何,他們分布在不同命名空間里。特別說明,HandleErrorAttribute 使用在  ASP.NET MVC,無法拿來處理 Web API controller 的異常。

       

      參考資料· System.Web.Http

      · System.Net.Http

      · Exception Handling in ASP.NET Web API

      ·ASP.NET Web API Exception Handling

      posted @ 2012-05-13 08:51  張善友  閱讀(4668)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 伊人激情av一区二区三区| 一区二区三区鲁丝不卡| 天堂av网一区二区三区| 亚洲一线二线三线品牌精华液久久久| 免费无码肉片在线观看| 昌平区| 男人的天堂av社区在线| 2020年最新国产精品正在播放| 日韩人妻不卡一区二区三区| 一区二区三区四区亚洲自拍| 亚洲精品人妻中文字幕| 田东县| 江油市| 久久精品蜜芽亚洲国产AV| 精品午夜久久福利大片| 成人午夜av在线播放| 人妻无码中文字幕| 莱阳市| 国产最大成人亚洲精品| 亚洲成人av日韩在线| 精品中文人妻在线不卡| 国内揄拍国内精品少妇国语 | 日韩一区二区三区女优丝袜| 国产午夜成人久久无码一区二区| 午夜免费无码福利视频麻豆| 亚洲精品自拍在线视频| 国产免费久久精品44| 亚洲精品区二区三区蜜桃| 天堂V亚洲国产V第一次| 国产精品亚洲二区亚瑟| 国偷自产av一区二区三区| 日韩av天堂综合网久久| 成年女人片免费视频播放A| 武穴市| 亚洲男人天堂2018| 欧美黑人XXXX性高清版| japan黑人极大黑炮| 国产精品成人一区二区不卡| 国语精品自产拍在线观看网站| 通江县| 国产在线观看免费观看不卡|