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处理请求.
IHttpHandler处理请求api的更多相关文章
- [HTTP那些事]网络请求API
在Android上,原生API有两个,HttpUrlConnection和HttpClient,它们对封装Socket进行封装,让HTTP请求变得简单.这应该也算框架吧? 想象下,如果没有HttpUr ...
- 小程序前端防止重复点击请求api的简陋方法
upload: function () { let that = this; let {uploadFlag} = that.data; if (that.data.uploadFlag) { ret ...
- 关于ajax跨域请求API数据的一些问题
一般来说我们使用jquery的ajax来跨域请求API数据的时候每次请求,就只能请求一组数据,而且当我们再次点击发送ajax请求的时候,新请求的数据会覆盖掉原来的数据,那么如何每次在请求的数据的时候, ...
- 在线HTTP POST/GET模拟请求api接口http请求测试工具https://post.jsonin.com/
在线HTTP POST/GET模拟请求api接口http请求测试工具 在线POST/GET接口测试工具https://post.jsonin.com/ Json在线解析及格式化校验工具 https:/ ...
- 跨域请求——WebClient通过get和post请求api
AJAX不可以实现跨域请求,经过特殊处理才行.一般后台可以通过WebClient实现跨域请求~ //get 请求 string url = string.Format("htt ...
- reqwest请求api和约束(转载)
转自:https://www.oschina.net/p/reqwest reqwest 用于浏览器异步HTTP请求.支持xmlHttpRequest, JSONP, CORS, 和 CommonJS ...
- 第三篇、微信小程序-网络请求API
wx.request(OBJECT)发起的是https请求.一个微信小程序,同时只能有5个网络请求连接. OBJECT参数说明: 效果图: net.js Page({ data:{ result:{} ...
- Web Api HttpWebRequest 请求 Api 及 异常处理
HttpWebRequest request = WebRequest.CreateHttp(url); request.Method = "post"; request.Head ...
- 【微信小程序】对微信http请求API的封装,方便对错误码进行处理
/** * App 微信配置文件app.js * author: nujey * versions: 1.0.0 */ App({ /** * @param {Object ...
随机推荐
- Ubuntu16系统中安装htpasswd
htpasswd是Apache附带的程序, htpasswd生成包含用户名和密码的文本文件, 每行内容格式为“用户名:密码”, 用于用户文件的基本身份认证. 当用户浏览某些网页的时候, 浏览器会提示输 ...
- react组件选项卡demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript内置函数:toString()
不同对象有不同的实现方式. 1.Number对象: 语法:numberObject.toString([radix]) 参数:radix,可选/Number类型,指定的基数(进制数),支持[2,36] ...
- MySQL — 优化之explain执行计划详解(转)
EXPLAIN简介 EXPLAIN 命令是查看查询优化器如何决定执行查询的主要方法,使用EXPLAIN,只需要在查询中的SELECT关键字之前增加EXPLAIN这个词即可,MYSQL会在查询上设置一个 ...
- Azure系列2.1.10 —— CloudBlobClient
(小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...
- [转帖]dd命令详解
dd命令详解 https://czmmiao.iteye.com/blog/1748748 之前一直对linux的命令很恐惧 现在发现 其实不是那么复杂 要仔细学习就可以了 比如 dd = disk ...
- 逻辑斯特回归tensorflow实现
calss #!/usr/bin/python2.7 #coding:utf-8 from __future__ import print_function import tensorflow as ...
- Laravel渴求式加载(比较容易理解理解load与with关系)
渴求式加载 当以属性方式访问 Eloquent关联关系的时候,关联关系数据是「懒惰式加载」的,这意味着关联关系数据直到第一次访问的时候才被加载.不过,Eloquent 还可以在查询父级模型的同时「渴求 ...
- JSON Support in PostgreSQL and Entity Framework
JSON 和JSONB的区别(What's difference between JSON and JSONB data type in PosgresSQL?) When should be use ...
- 名称空间2.0path
Django 1点几跟2点几的区别 2.0path 是什么路径就是什么路径.第一个参数不再是正则表达式. 转换器 path的分组 <int:year> 匹配正整数 <str:year ...