Asp.net Web Api开发(第一篇) 自定义HTTP消息拦截器
2016-03-18 08:52
661 查看
拦截器类的实现需要继承DelegatingHandler,借用一张网络上的图,我们要实现的拦截器即图中的Message Handler这一层。
上代码:
既然实现了相关的拦截器,那我们得找个地方把它插入到web api的处理流程中去,
代码插入到WebApiConfig.cs中:
到此就完成了。自己尝试建个webapi项目测试下吧。
上代码:
/// <summary> /// HTTP消息拦截器 /// </summary> public class RequestHandler : DelegatingHandler { /// <summary> /// 拦截请求 /// </summary> /// <param name="request">请求</param> /// <param name="cancellationToken">用于发送取消操作信号</param> /// <returns></returns> protected async override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { //获取URL参数 NameValueCollection query = HttpUtility.ParseQueryString(request.RequestUri.Query); //获取Post正文数据,比如json文本 string fRequesContent = request.Content.ReadAsStringAsync().Result; //可以做一些其他安全验证工作,比如Token验证,签名验证。 //可以在需要时自定义HTTP响应消息 //return SendError("自定义的HTTP响应消息", HttpStatusCode.OK); //请求处理耗时跟踪 Stopwatch sw = new Stopwatch(); sw.Start(); //调用内部处理接口,并获取HTTP响应消息 HttpResponseMessage response = await base.SendAsync(request, cancellationToken); //篡改HTTP响应消息正文 response.Content = new StringContent(response.Content.ReadAsStringAsync().Result.Replace(@"\\", @"\")); sw.Stop(); //记录处理耗时 long exeMs = sw.ElapsedMilliseconds; return response; } /// <summary> /// 构造自定义HTTP响应消息 /// </summary> /// <param name="error"></param> /// <param name="code"></param> /// <returns></returns> private HttpResponseMessage SendError(string error, HttpStatusCode code) { var response = new HttpResponseMessage(); response.Content = new StringContent(error); response.StatusCode = code; return response; } }
既然实现了相关的拦截器,那我们得找个地方把它插入到web api的处理流程中去,
代码插入到WebApiConfig.cs中:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 config.MessageHandlers.Add(new RequestHandler()); // Web API 路由 config.MapHttpAttributeRoutes(); } }然后应用该webapi配置
public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();//设置返回值统一为json } }
到此就完成了。自己尝试建个webapi项目测试下吧。
相关文章推荐
- 类脑计算与神经网络加速
- C++卷积神经网络实例:tiny_cnn代码详解(8)——partial_connected_layer层结构类分析(上)
- 虚拟机的三种网络模式
- KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)
- Xcode7禁用了明码的HTTP请求
- KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)
- KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)
- 16.网络提速(最短路)
- Android中okHttp的使用
- HTTP/1.1 协议规定的 HTTP 请求方法
- qt+boost::asio+tcp文件传输
- 网络IO之阻塞、非阻塞、同步、异步总结
- Symfony2框架学习笔记之HTTP Cache用法详解
- 网络直播的那些鲜花,不是十几年前的夜总会花篮吗?
- 谈HTTPS和HTTP的利与弊!低成本HTTPS加密有活动!
- 网站流量劫持,数据泄露怎么办?HTTP加密能解决吗?
- KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)
- http跨域问题(cookie等)
- HttpServerUtility类
- 机器视觉网络资源学习笔记