zoukankan      html  css  js  c++  java
  • C#解决jsonp跨域问题jsonp跨域配置

    1,建立一个CorsHandler类

    public class CorsHandler : 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";

    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);
    }
    }
    }

    2、在Application_Start()里面配置

    //jsonp跨域
    GlobalConfiguration.Configuration.MessageHandlers.Add(new CorsHandler());

    OK,完美解决。

  • 相关阅读:
    forEach
    Apache localhost和局域网ip地址访问
    数据库基础知识(必读)
    设计模式其他常见面试题
    设计模式学习
    简历书写注意事项
    计算机网络常见面试题二
    计算机网络常见面试题一
    分布式系统中的CAP 理论
    多线程常见面试题一
  • 原文地址:https://www.cnblogs.com/wjslw/p/5937438.html
Copyright © 2011-2022 走看看