基於IHttpHandler 的非標準webapi

2021-08-28 21:57:35 字數 1148 閱讀 7393

基於ihttphandler 的非標準webapi

此篇文章是本菜鳥對於公司大神自研框架的研究,也就是扒**…

如有不足請指出

先舉個栗子,在命名空間abc.websiteapi下有systemuserapiapi類,類中有create這個方法

namespace abc.websiteapi

}}

想要做到通過這個鏈結可以響應上述方法

1.web.config中定義handlers,可以路由到對應的程式集和類

而這個類就是繼承ihttphandler的自定義handel,入口

2.所有介面都寫在同乙個程式集下,本例就是abc.websiteapi,初始化時載入該程式集下的所有類(assembly類的多種靜態load方法引導程式集),例如systemuserapi…,存入字典項

3.入口handle類中,獲取響應的httpcontext,獲得請求的類名,方法名,引數

4.驗證之前初始化的字典項中是否存在請求的類名(在類名中找是否存在systemuserapi)

找到對應的類名,即可獲得類下的所有方法

驗證請求的方法名是否在上述所有方法中(查詢是否存在create)

5.引數

找到對應的方法後,可以通過methodinfo.getparameters()獲取引數(這裡是方法本身的引數,而不是請求的引數)

迴圈引數,驗證對應的請求中是否合法(如非空,型別不匹配之類的)並封裝成object陣列。記得要轉換成對應的型別用convert.changetype,部分**如下

private object getparmvaluefromrequest(parameterinfo parm)

trycatch (exception ex)

}

6.呼叫方法

方法.invoke(例項, 引數);

就可以啦

以上就是根據**自己所總結的步驟和思路啦

應用場景,頻繁的與移動端做互動,mvc顯的太過臃腫,那目前webapi又沒有與mvc做分割,所以用ihttphandler結合反射,做的乙個輕量的框架

IHttpHandler 接收axios請求的引數

前台寫法如下 axios.post apinew goodsapi.ashx?action createcurtain then res error 請求引數格式如下 這個格式的資料一般處理程式用var json context.request formdata 這種寫法獲取不到 所以用下面的方法來...

在IHttpHandler中獲取session

因為業務要非同步通過ihttphandler獲得資料,但還要根據當前登入人員的session過濾,因此要在在ihttphandler中獲取session 方法是httphandler容器中如果需要訪問session,必須實現irequiressessionstate介面,這只是乙個標記介面,沒有任何...

URL重寫之實現IHttpHandler介面

以前用url重寫時是用的ms urlrewriter,用了以後發現了很多不足,自定義功能太弱,而且隨著重寫規則的增加,web.config可能會越來越大,實際上,url重寫就是實現ihttphandler介面.整個流程分二步走 1 用乙個xml檔案來儲存重寫規則,其中這些規則是一些簡單的正規表示式 ...