解决方法一:

public class CrosHandler : DelegatingHandler
{
private const string Origin = "Origin";
private const string AccessControlRequestMethod = "Access-Control-Request-Method";
private const string AccessControlRequestHeaders = "Access-Control-Request-Headers";
private const string AccessControlAllowOrign = "Access-Control-Allow-Origin";
private const string AccessControlAllowMethods = "Access-Control-Allow-Methods";
private const string AccessControlAllowHeaders = "Access-Control-Allow-Headers";
private const string AccessControlAllowCredentials = "Access-Control-Allow-Credentials"; /// <summary>
/// 异步发送 HTTP 请求到要发送到服务器的内部处理程序
/// </summary>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
bool isCrosRequest = request.Headers.Contains(Origin);
//是否预请求
bool isPrefilightRequest = request.Method == HttpMethod.Options;
if (isCrosRequest)
{
Task<HttpResponseMessage> taskResult = null;
if (isPrefilightRequest)
{
taskResult = Task.Factory.StartNew<HttpResponseMessage>(() =>
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Accepted);
response.Headers.Add(AccessControlAllowOrign, request.Headers.GetValues(Origin).FirstOrDefault()); string method = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault();
if (!string.IsNullOrEmpty(method))
{
response.Headers.Add(AccessControlAllowMethods, method);
} string headers = string.Join(", ", request.Headers.GetValues(AccessControlRequestHeaders));
if (!string.IsNullOrEmpty(headers))
{
response.Headers.Add(AccessControlAllowHeaders, headers);
} response.Headers.Add(AccessControlAllowCredentials, "true");
return response;
}, cancellationToken);
}
else
{
taskResult = base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>(t =>
{
var response = t.Result;
response.Headers.Add(AccessControlAllowOrign, request.Headers.GetValues(Origin).FirstOrDefault());
response.Headers.Add(AccessControlAllowCredentials, "true");
return response;
}, cancellationToken);
}
return taskResult;
}
return base.SendAsync(request, cancellationToken);
}
}

调用:

调用方式:在Global.asax文件的Application_Start方法添加GlobalConfiguration.Configuration.MessageHandlers.Add(new CrosHandler());或者在WebApiConfig.cs下面添加:config.MessageHandlers.Add(new CrosHandler());

解决方法二:

在Web.config下的<system.webServer>节点之间添加一下代码:

<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Access-Control-Allow-Origin, AppKey, Authorization" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS" />
<add name="Access-Control-Request-Methods" value="GET, POST, OPTIONS" />
</customHeaders>
</httpProtocol>

最新文章

  1. 基于mysql的数据管理
  2. asp.net mvc4 简单的服务器监控开发之C#获取服务器CPU、RAM、TCP等系统信息(上)
  3. 一张图说明CDN网络的原理
  4. Java深度历险(五)——Java泛型
  5. ListView实现原理
  6. Tensorflow学习笔记4:分布式Tensorflow
  7. Linux中环境变量文件及配置(转载)
  8. POI 简单合并单元格
  9. Android开源项目发现--- 工具类网络相关篇(持续更新)
  10. CentOS 5.4下的Memcache安装步骤(Linux+Nginx+PHP+Memcached)
  11. 清北第一套题(zhx)
  12. httplib,urllib和urllib2
  13. leetCode刷题(使用链表做加法)
  14. 跟踪OceanLotus的新下载程序KerrDown
  15. org.hibernate.MappingException: An association from the table order_intem_inf refers to a unmapped
  16. Mybatis自动生成的配置实例
  17. 搭建virtualenv
  18. 使用BBED理解和修改Oracle数据块
  19. 限流(四)nginx接入层限流
  20. 如何将一个PDF文件里的图片批量导出

热门文章

  1. AutoFileName 使用src ,href 引入文件时,会自动补全路径的插件
  2. MongoDB 4.0 事务实现解析
  3. AS400遇到的一些问题和解决办法
  4. Linux操作系统常用命令合集——第二篇- 用户和组操作(15个命令)
  5. AtCoder Grand Contest 001 题解
  6. python常用函数2
  7. 配置Jupyter Notebook
  8. 我需要关于fixedFluxPressure边界的解释【翻译】
  9. netcore 发布到IIS上常见错误
  10. Android 系统添加SELinux权限