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

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

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

      webAPI請求消息過濾器

      每當制作一個WebAPI,就必然會收到外部很多調用這個API的請求,有時候,我們希望,能從這些外部來的請求中,按照一定條件篩選過濾一下,只將那些我們覺得合法的,有必要回應的請求放進來,一方面擋住那些非法請求,一方面也可以節省服務器應付無效請求的資源

      這個時候,我們就需要創建一個過濾器

      碰巧,前幾年給之前某家公司做webapi的時候,鉆研過這部分,剛好讓我找到了一個在請求到達controller之前過濾掉的辦法

      好了,廢話不多說,直奔主題,這個過濾器的核心就是一個messageHandler,至于它是怎么起到過濾的作用,這方面的原理,我就不詳述了,想知道的同學可以點進下面鏈接

      http://www.rzrgm.cn/wk1234/archive/2012/05/07/2486872.html

      既然核心是一個messageHandler,那么首先就是要創建一個Handler類,如下圖

      我給這個Handler類起名叫CustomHandler(當然叫別的名字也可以,這個隨個人喜好),接下來,就是核心代碼部分

      using System;
      using System.Collections.Generic;
      using System.Linq;
      
      using System.Web;
      using System.Net.Http;
      using System.Net;
      using System.Threading.Tasks;
      using System.Text;
      
      namespace Cabbeen.EWM.RFWebAPI.Handler
      {
          public class CustomHandler: DelegatingHandler
          {
              protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
              {
                  string message = "";
      
                  var content = request.Content;
                  string jsonContent = content.ReadAsStringAsync().Result;//用這個方法可以獲取請求里的body參數值
      
                  if (jsonContent.Length < 10)
                  {
                      //無效請求,直接拒絕
                      var response = new ResultResponse();//自定義的返回結果類
                      message = "無效請求 無參數或參數長度不夠";
                      response.Status = HttpStatusCode.Forbidden.ToString();
                      response.Msg = message;
                      return Task.Factory.StartNew<HttpResponseMessage>(() => { return request.CreateResponse(HttpStatusCode.Forbidden, response); });
                  }
      
                  //string method = request.Method.ToString();
                  //Uri uri = request.RequestUri;
                  //HttpContextBase contextBase = (HttpContextBase)request.Properties["MS_HttpContext"];
                  //HttpRequestBase requestBase = contextBase.Request;
                  //NameValueCollection querycollection = null;
                  //if (requestBase.HttpMethod == "POST")
                  //{
                  //    querycollection = requestBase.Form;
                  //}
                  //if (requestBase.HttpMethod == "GET")
                  //{
                  //    string querys = requestBase.Url.Query.TrimStart('?');
                  //    StringBuilder querybuilder = new StringBuilder(querys);
                  //    querycollection = HttpUtility.ParseQueryString(querybuilder.ToString());
                  //}
      
                  //合理請求,順利放行
                  return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
                  {
                      HttpResponseMessage resp = task.Result as HttpResponseMessage;
                      return resp;
                  });
      
              }
          }
      }

       

      注意,代碼中的關鍵部分我都進行了標紅,并且我刪掉了部分與示例無關的項目代碼,你們重點看標紅的部分代碼應該就大概了解了

      代碼的處理邏輯很簡單:如果身份驗證碼匹配成功,則通過base.SendAsync繼續將請求向下傳遞,否則返回直接中斷請求的傳遞,直接返回一個響應碼為403的響應,指示沒有權限。
      注意由于SendAsync的返回值需要封裝在Task之中,所以需要使用Task.Factory.StartNew將返回值包含在Task中

      那么現在,過濾器部分的邏輯已經算是寫好了,等于是過濾器已經建好了,接下來,就是要把過濾器安裝起來,怎么安裝呢

      很簡單,在App_Start文件夾下的WebApiConfig里面,加一句代碼就可以了

      在WebApiConfig.cs里面的Register方法里加上一句config.MessageHandlers.Add(new Handler.CustomHandler()); 如下圖

      這樣一來,過濾器就算是裝載好了,接下來,趕緊模擬請求斷點調試試試效果吧

      如果還不行,就試試在HttpApplication.Application_Start中加添加如下語句

      GlobalConfiguration.Configuration.MessageHandlers.Add(new Handler.CustomHandler());

      HttpApplication.Application_Start方法一般在Global.asax.cs里

      不過要注意的是,如果WebApiConfig中已經加載了一次CustomHandler,這里就不能再加載,否則CustomHandler會執行兩遍

      posted @ 2018-03-29 21:49  月井石  閱讀(896)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 撩起胸让我的?蹭来蹭去| 美女一区二区三区在线观看视频| 成人av专区精品无码国产| 人妻少妇不满足中文字幕| 国产精品伦人一久二久三久| 无码专区视频精品老司机| 国产95在线 | 欧美| 国产人与zoxxxx另类| 亚洲爽爆av一区二区| 亚洲天堂精品一区二区| 99精品国产精品一区二区| 国产综合色在线精品| av中文字幕在线二区| 少妇伦子伦情品无吗| 免费视频成人片在线观看 | 在熟睡夫面前侵犯我在线播放| 国产精品尤物乱码一区二区| 亚洲精品麻豆一二三区| 国产成人啪精品午夜网站| 欧美性受xxxx黑人猛交| 九九热免费在线观看视频| 欧洲亚洲精品免费二区| 在线看无码的免费网站| 国产精品一区在线蜜臀| 99久久国产一区二区三区| 日本人一区二区在线观看| 国产成人精品中文字幕| 日韩精品一区二区午夜成人版| 国产九九视频一区二区三区| 亚洲精品一区二区天堂| 亚洲人妻系列中文字幕 | 亚洲国产精品综合久久2007| 在线天堂中文新版www| 人人人爽人人爽人人av| 国产一区二区三区导航| 国产精品99区一区二区三| 亚洲一区精品视频在线| 久久大香线蕉国产精品免费| 91福利视频一区二区| 隆安县| 男人和女人做爽爽免费视频 |