IHttpHandler处理请求api

使用IHttpHandler处理请求,实现webapi功能.

研究asp.net管道处理事件后,可用此法实现webapi功能.

 

测试环境 VS2017 WIN10 IIS10 集成模式

关键接口类两个 IHttpHandlerFactory 和 IHttpHandler 

 

处理过程

1.实现IHttpHandlerFactory,它的作用是指定由哪一个IHttpHandler来处理请求.在第7个事件时执行.

2.在第11个事件时,执行IHttpHandler.在这个处理类中,分析URL地址,使用反射找到对应的类和方法执行之.

具体做法

1.新建一个.net framework类库项目,添加两个类,分别实现IHttpHandlerFactory IHttpHandler  (注意添加System.Web程序集)

// 实现IHttpHandlerFactory

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处理请求.

转载于:https://www.cnblogs.com/mirrortom/p/9232887.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值