基於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檔案來儲存重寫規則,其中這些規則是一些簡單的正規表示式 ...