前言:

  这段时间接手了一个新需求,将一个ASP.NET MVC项目改成前后端分离项目。前端使用Vue,后端则是使用ASP.NET WebApi。在搭建完成前后端框架后,进行接口测试时发现了一个前后端分离普遍存在的问题跨域(CORS)请求问题。因此就有了这篇文章如何启用ASP.NET WebApi 中的 CORS 支持。

一、解决Vue报错:OPTIONS 405 Method Not Allowed问题:

错误重现:

index.umd.min.js:1 OPTIONS http://localhost:1204/api/Login/ShopKeeperLogin 405 (Method Not Allowed)

解决方法:

在项目Global.asax中添加对OPTIONS方法的处理:

        /// <summary>
/// 跨域设置(预请求响应问题)
/// </summary>
protected void Application_BeginRequest()
{
//OPTIONS请求方法的主要作用(预请求,判断是否能够请求成功):
//用来检查服务器的性能。如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
//表示对输出的内容进行缓冲,执行page.Response.Flush()时,会等所有内容缓冲完毕,将内容发送到客户端。
//这样就不会出错,造成页面卡死状态,让用户无限制的等下去
Response.Flush();
}
}

二、解决ASP.NET WebApi 跨域资源共享-Cross Origin Resource Sharing(CORS)问题:

错误重现:

 Access to XMLHttpRequest at 'http://localhost:1204/api/Login/ShopKeeperLogin' from origin 'http://localhost:8081' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

允许所有来源,HTTP方法,请求标头跨域:

在Web.config中找到system.webServer标签里面添加如下配置:

    <httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
</customHeaders>
</httpProtocol>

指定对应来源,HTTP方法和请求标头跨域:

详情参考微软官方文档:https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api#set-the-allowed-origins

最新文章

  1. Fiddler 使用备忘
  2. centos7安装eclipse
  3. php以post方式向接口发送数据
  4. IIS7上设置MIME让其支持android和Iphone的更新下载
  5. 理解css中的line-height
  6. [Effective JavaScript 笔记]第15条:当心局部块函数声明笨拙的作用域
  7. 解决pdm打开只显示表名不显示字段的步骤
  8. jquery组件团购倒计时功能(转)
  9. Application.DoEvents()的作用
  10. LoadRunner监控Unix、Windows方法及常用性能指标
  11. C# 枚举器
  12. Java-IO之ByteArrayInputStream
  13. 使用 “mini-css-extract-plugin” 提取css到单独的文件
  14. JS操作Cookies
  15. linux系统网络相关问题
  16. ionic3 打包报错[ERROR] An error occurred while running cordova prepare (exit code 1):
  17. 设计模式原则(7)--Composition&amp;AggregationPrinciple(CARP)--合成&amp;聚合复用原则
  18. 抓取js动态生成的数据分析案例
  19. Django模版语言inclusion_tag的用法。
  20. B2B(企业对企业)、B2C(企业对个人)、C2C(个人对个人)

热门文章

  1. (一)spring 高级装配-@Profile
  2. 字符串的格式化、运算符和math函数(python中)
  3. 打印方案之web打印
  4. 配置Redis(远程访问及授权设置)
  5. python自动化测试三部曲之untitest框架
  6. EF Core 实现读写分离的最佳方案
  7. VisualStudio自定义调试工具(GIS)
  8. 队列 &amp; 栈---概述
  9. MongoDB 走马观花(全面解读篇)
  10. @ConfigurationProperties、@Value、@PropertySource