IHttpHandler處理請求api

使用IHttpHandler處理請求,實現webapi功能.html

研究asp.net管道處理事件後,可用此法實現webapi功能.git

 

測試環境 VS2017 WIN10 IIS10 集成模式github

關鍵接口類兩個 IHttpHandlerFactory 和 IHttpHandler web

 

處理過程api

1.實現IHttpHandlerFactory,它的做用是指定由哪個IHttpHandler來處理請求.在第7個事件時執行.asp.net

2.在第11個事件時,執行IHttpHandler.在這個處理類中,分析URL地址,使用反射找到對應的類和方法執行之.測試

具體作法ui

1.新建一個.net framework類庫項目,添加兩個類,分別實現IHttpHandlerFactory IHttpHandler  (注意添加System.Web程序集)url

// 實現IHttpHandlerFactoryspa

public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
{

  // 類的做用就是返回一個IHttpHandler

   return new ApiHandler();

}

// ApiHandler()類 實現IHttpHandler

public void ProcessRequest(HttpContext context)
{

  // 分解URL路徑用於找類名和方法名
  string[] urlparts = context.Request.RawUrl.Split('/');

  string apiClassN = urlparts[1];
  string apiMethodN = urlparts[2];

  // 反射找到這個類,實現化之.而且傳入context上下文對象

  Type webapiT = Assembly.GetExecutingAssembly().GetType(apiClassN, false, true);

  WebApiBase workapi = (WebApiBase)Activator.CreateInstance(webapiT, true);
  workapi.SetHttpContext(context);

  // 執行方法
  webapiMethod.Invoke(workapi, null);

  // 此至,完成請求

}

 

2.webconfig須要添加處理程序映射.注意path "*." ,它匹配 /user/info 這種不帶擴展名的路徑

<add name="FactoryHandler" path="*." verb="*" type="FactoryHandlerFactory" resourceType="Unspecified" preCondition="integratedMode" />

 

3.對於靜態文件,不須要走處理管道,使用系統的靜態文件處理模塊.配置以下
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />

 

4.能夠建一個.net  framework類庫項目,添加上述文件.掛到IIS下,使用集成模式.能夠用於webapi處理請求.

 

5.示例代碼

https://github.com/mirrortom/MyWebApi

相關文章
相關標籤/搜索