webAPI 支持网页测试 必须是谷歌浏览器

来源:互联网 发布:北京网络营销软件价格 编辑:程序博客网 时间:2024/06/05 00:12
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Http;
using System.Net;
using System.Net.Http;
namespace Legal.Api.Service
{
    public class MessageHandler : DelegatingHandler
    {
        const string Origin = "Origin";


        const string AccessControlRequestMethod = "Access-Control-Request-Method";


        const string AccessControlRequestHeaders = "Access-Control-Request-Headers";


        const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";


        const string AccessControlAllowMethods = "Access-Control-Allow-Methods";


        const string AccessControlAllowHeaders = "Access-Control-Allow-Headers";


        //const string AccessControllRequestHeader = "X-HTTP-Method-Override";
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {


            bool isCorsRequest = request.Headers.Contains(Origin);


            bool isPreflightRequest = request.Method == HttpMethod.Options;


            if (isCorsRequest)
            {


                if (isPreflightRequest)
                {


                    return Task.Factory.StartNew<HttpResponseMessage>(() =>
                    {


                        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);


                        response.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());


                        string accessControlRequestMethod = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault();


                        if (accessControlRequestMethod != null)
                        {


                            response.Headers.Add(AccessControlAllowMethods, accessControlRequestMethod);


                        }


                        string requestedHeaders = string.Join(", ", request.Headers.GetValues(AccessControlRequestHeaders));


                        if (!string.IsNullOrEmpty(requestedHeaders))
                        {


                            response.Headers.Add(AccessControlAllowHeaders, requestedHeaders);


                        }


                        return response;


                    }, cancellationToken);


                }


                else
                {
                    return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>(t =>
                    {
                        HttpResponseMessage resp = t.Result;
                        resp.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
                        return resp;


                    });


                }


            }


            else
            {
                return base.SendAsync(request, cancellationToken);


            }


        }


    }
}

0 0
原创粉丝点击