用于对Request报头进行嵌入身份验证码的处理

时间:2022-05-04 03:14:32

一、WebAPI的事情方法

WebAPI的事情方法:HTTP的请求最先是被通报到HOST中的,如果WebAPI是被寄宿在IIS上的,这个HOST就是IIS上,HOST是没有能力也没有必 要进行请求的措置惩罚惩罚的,请求通过HOST被转发给了HttPServer此时已经进入WebAPI的措置惩罚惩罚加工范畴,HttpServer是 System.Net.HTTP中的一个类,通过HttpServer,请求被封装成了WebAPI中的请求承载 类:HttpRequestMessage,这个封装后的请求可以颠末一系列自界说的Handler来措置惩罚惩罚,这些handler串联成一个 pipeline,最后请求会被通报给HttpControlDispather,这个类通过对路由表的检索来确定请求将被转发到的具体的 Controller中的Action。

由此我们早就可以看出,想要解决第二个问题,可以直接在Handler PipeLine中进行,这种AOP气势派头的过滤器(拦截器)在REST的Webservice的安适验证中应用很广,一般大家对照乐于在HTTP头或者在 HTTP请求的URL中加上身份验证字段进行身份验证,下面举一个在Http头中添加身份验证信息的小例子:

二、说明

本节所使用的例子,只是在“asp.net mvc4 webapi之应用客户端访谒处事器端”的例子上稍作改削而已,在看本篇文章之前,请先看文档“asp.net mvc4 webapi之应用客户端访谒处事器端”

三、例子改削

首先打开文档“webapi之应用客户端访谒处事器端.docx”中对应的解决方案“MyTest”,下面分袂介绍我们对处事器端、客户端所做的改削

1、处事器端

(1)、首先添加一个文件夹,定名为:HandlerLib

(2)、在文件夹HandlerLib添加一个类,并定名为:SecurityHandler,代码如下

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Net.Http;

using System.Threading.Tasks;

using System.Web;

 

namespace MyServer.HandlerLib

{

    public class SecurityHandler : DelegatingHandler

    {

        protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken

           cancellationToken)

        {

            int matchHeaderCount = request.Headers.Count((item) =>

            {

                if ("keyword".Equals(item.Key))

                {

                    foreach (var str in item.Value)

                    {

                        //wanli就是约定的处事器端验证口令或验证验证信息

                        if ("wanli".Equals(str))

                        {

                            return true;

                        }

                    }

                }

                return false;

            });

            if (matchHeaderCount > 0)

            {

                return base.SendAsync(request, cancellationToken);

            }