手机版

Net WebApi消息拦截器之消息操作者的示例

时间:2021-08-30 来源:互联网 编辑:宝哥软件园 浏览:

消息拦截器是一个类,接收超文本传送协议请求并返回超文本传送协议响应,消息处理程序继承自抽象类HttpMessageHandler可以自定义MessageHandler,消息拦截器的作用如:

读取或更改请求头请求标题添加响应标题在到达控制器之前,进行参数验证

自定义消息处理程序

自定义消息操作者需要继承系统. Net。Http.DelegatingHander并且重载SendAsync方法

taskshttpresponsemessage发送异步(Httprequestmessage请求cancelationtoken cancelationtoken);这个方法的一般的处理流程是

处理请求信息调用基地发送异步.方法,吧请求发送给内部处理内部处理完成之后,返回响应消息(这个过程是异步的)处理反应之后,返回给调用者公共类messagehandler 1 : DelegatingHandler(受保护的异步覆盖tashttpresponsemessage发送异步(Httprequestmessage请求,cancelationtoken cancelationtoken){ Debug .写线("处理请求");//调用内部处理程序var .响应=等待基数发送异步(请求,取消令牌);调试。写线("进程响应");返回响应;}}消息拦截器生效

在WebApiConfig中注册相关

公共静态类WebApiConfig{公共静态无效寄存器(HttpCONFIGuration config){ config .MessageHandlers。add(new message handler 1());配置消息处理程序。add(new message handler 2());//未显示其他代码.}}https请求拦截器

要求所有的请求都必须是安全超文本传输协议的请求,可以自定义一个安全超文本传输协议的拦截器,如果是安全超文本传输协议请求,就继续处理,否则就返回相关的提示信息

公共类必需的httphandler : DelegatingHandler { public required httphandler(int httpport){ _ httpport=httpport;} public require https处理程序():此(443) { }保护覆盖tashttpresponsemessage发送异步(http请求消息请求,canceltintoken cancellatitoken){//判断是否是安全超文本传输协议请求如果(请求。请求Uri .方案==Uri .UriSchemeHttps)返回基数发送异步(请求,取消令牌);var response=CreateResponse(请求);var TCS=new TaskCompletionSourceHttpResponseMessage();tcs .SetResult(响应);返回tcs .任务;}私有http响应消息创建响应(Httprequestmessage请求){ HttpResponseMessage响应;var uri=新的UriBuilder(请求.请求uri);尤里方案=Uri .UriSchemeHttps尤里端口=_ httpsPortvar正文=字符串。格式('需要HTTPS/该资源可以在上呼吸道感染中找到uri。绝对的);如果(请求。方法获取)||请求。方法Head)) {响应=请求.CreateResponse(HttpStatusCode .找到);回应。标题。位置=uri .Uriif(请求。方法得到)响应。内容=新字符串内容(正文,编码. UTF8,‘text/html’);}否则{响应=请求.CreateResponse(HttpStatusCode .未找到);回应。内容=新字符串内容(正文,编码. UTF8,‘text/html’);}返回响应;} }启用克-奥二氏分级量表拦截器

公共类SimpleCorsHandler : DelegatingHandler { private const string Origin=' Origin ';私有常量字符串访问控制请求方法=“访问控制请求方法”;私有常量字符串访问控制请求标头=“访问控制请求标头”;私有常量字符串访问控制允许原始='访问控制允许原始';私有常量字符串accessControlAllowMethods="访问控制-允许-方法";私有常量字符串访问控制允许标题='访问控制允许标题';受保护的覆盖tashttpresponsemessage发送异步(Httprequestmessage请求,cancellatitoken cancellatitoken){ var iscressrequest=request .标题。包含(来源);var isPreflightRequest=request .方法==HttpMethod .选项;if(iscrersrequest){ if(isprelightrequest)}返回任务.工厂。StartNew(()={ var response=new Httpresponsemessage(Httpstatuscode .OK);回应。标题。添加(accessControlAllowOrigin,请求。获取值(原点)。first());var currentaccesscontrolrequest方法=request .获取值(访问控制请求方法)。first ordefault();if(currentaccesscontrolrequest方法!=null){ 0响应标题。添加(accessControlAllowMethods,currentAccessControlRequestMethod);} var requestedHeaders=string .加入(',',请求标题。GetValues(accessControlRequestHeaders));if(!字符串IsNullOrEmpty(请求的标头)){ 0响应标题。添加(accessControlAllowHeaders,请求的标头);}返回响应;},cancelationtoken);} else {返回基数。发送异步(请求,取消令牌)。继续(t={ var resp=t。结果;resp .标题。添加(accessControlAllowOrigin,请求。获取值(原点)。first());返回响应;});} } else { return base .SendAsync(请求,取消令牌);} }}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:Net WebApi消息拦截器之消息操作者的示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。