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

IHttpHandler处理请求api的更多相关文章

  1. [HTTP那些事]网络请求API

    在Android上,原生API有两个,HttpUrlConnection和HttpClient,它们对封装Socket进行封装,让HTTP请求变得简单.这应该也算框架吧? 想象下,如果没有HttpUr ...

  2. 小程序前端防止重复点击请求api的简陋方法

    upload: function () { let that = this; let {uploadFlag} = that.data; if (that.data.uploadFlag) { ret ...

  3. 关于ajax跨域请求API数据的一些问题

    一般来说我们使用jquery的ajax来跨域请求API数据的时候每次请求,就只能请求一组数据,而且当我们再次点击发送ajax请求的时候,新请求的数据会覆盖掉原来的数据,那么如何每次在请求的数据的时候, ...

  4. 在线HTTP POST/GET模拟请求api接口http请求测试工具https://post.jsonin.com/

    在线HTTP POST/GET模拟请求api接口http请求测试工具 在线POST/GET接口测试工具https://post.jsonin.com/ Json在线解析及格式化校验工具 https:/ ...

  5. 跨域请求——WebClient通过get和post请求api

    AJAX不可以实现跨域请求,经过特殊处理才行.一般后台可以通过WebClient实现跨域请求~ //get 请求        string url = string.Format("htt ...

  6. reqwest请求api和约束(转载)

    转自:https://www.oschina.net/p/reqwest reqwest 用于浏览器异步HTTP请求.支持xmlHttpRequest, JSONP, CORS, 和 CommonJS ...

  7. 第三篇、微信小程序-网络请求API

    wx.request(OBJECT)发起的是https请求.一个微信小程序,同时只能有5个网络请求连接. OBJECT参数说明: 效果图: net.js Page({ data:{ result:{} ...

  8. Web Api HttpWebRequest 请求 Api 及 异常处理

    HttpWebRequest request = WebRequest.CreateHttp(url); request.Method = "post"; request.Head ...

  9. 【微信小程序】对微信http请求API的封装,方便对错误码进行处理

    /**   * App 微信配置文件app.js   * author: nujey   * versions: 1.0.0   */   App({   /**   * @param {Object ...

随机推荐

  1. Tomcat Cluster

    Tomcat群集配置| Tomcat集群| MuleSofthttps://www.mulesoft.com/tcat/tomcat-cluster Tomcat Clustering - A Ste ...

  2. 原生JS操作object HTMLTableSectionElement 对象,获取行数

    html页面 <tbody id="infoTab"> <tr class="fomat"> <td class="bl ...

  3. JS XMLHttpRequesst对象 http post的五种请求状态

    记录一下js中对http请求的几种状态,下附代码 readyState 存有 XMLHttpRequest 的状态.从 0 到 4 发生变化. 0: 请求未初始化 1: 服务器连接已建立 2: 请求已 ...

  4. # 【Python3练习题 007】 有一对兔子,从出生后第3个月起每个月都生一对兔子, # 小兔子长到第三个月后每个月又生一对兔子, # 假如兔子都不死,问每个月的兔子总数为多少?

    # 有一对兔子,从出生后第3个月起每个月都生一对兔子,# 小兔子长到第三个月后每个月又生一对兔子, # 假如兔子都不死,问每个月的兔子总数为多少?这题反正我自己是算不出来.网上说是经典的“斐波纳契数列 ...

  5. jquery操作复选框(checkbox)的一些小技巧总结

    1.获取单个checkbox选中项(三种写法) //第一种 $("input:checkbox:checked").val() //第二种 $("input:[type= ...

  6. PostgreSQL 安装了contrib 之后 登录失败的问题

    1. 自己之前只是安装了 pg 10.6 2. 开发同事 需要用到 一个extensions 叫做 uuid-ossp 3. 执行报错  详情见昨天的blog 4. 然后执行了升级操作 结果 pg10 ...

  7. Linux基础操作二

    编程语言的作用及与操作系统和硬件的关系 编程语言的作用:用来定义计算机程序的形式,程序员用它来编写程序,进而控制其向计算机发出指令,使计算机完成人类布置的任务. 编程语言的作用及与操作系统和硬件的关系 ...

  8. Oracle 中sql文件的导入导出

    导出 一般导入的时候我用的是命令行 imp c##zs/@orcl fromuser=c##zs touser=c##zs file=D:\java\.dmp ignore=y c##zs 是创建的用 ...

  9. hive之size函数和cast转换函数

    size返回map集合中元素的个数: cast函数将一种类型的数据转换成其他格式的数据

  10. MySQL系列:数据表基本操作(2)

    1. 指定数据库 mysql> use portal; 2. 数据库表基本操作 2.1 查看数据表 mysql> show tables; +------------------+ | T ...