一、跨域问题的由来

出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。

正是由于这个原因,我们不同项目之间的调用就会被浏览器阻止。比如我们最常见的场景:WebApi作为数据服务层,它是一个单独的项目,我们的MVC项目作为Web的显示层,这个时候我们的MVC里面就需要调用WebApi里面的接口取数据展现在页面上。因为我们的WebApi和MVC是两个不同的项目,所以运行起来之后就存在上面说的跨域的问题。

二、跨域问题解决原理

CORS全称Cross-Origin Resource Sharing,中文全称跨域资源共享。它解决跨域问题的原理是通过向http的请求报文和响应报文里面加入相应的标识告诉浏览器它能访问哪些域名的请求。比如我们向响应报文里面增加这个Access-Control-Allow-Origin:http://localhost:8081,就表示支持http://localhost:8081里面的所有请求访问系统资源。其他更多的应用我们就不一一列举,可以去网上找找。

三、跨域问题解决细节

首先介绍下CORS如何使用,在WebApiCORS项目上面使用Nuget索“microsoft.aspnet.webapi.cors”,安装第一个然后在App_Start文件夹下面的WebApiConfig.cs文件夹配置跨域

    public static class WebApiConfig{public static void Register(HttpConfiguration config){//跨域配置config.EnableCors(new EnableCorsAttribute("*", "*", "*"));// Web API 路由config.MapHttpAttributeRoutes();config.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional });}}

我们暂定三个“*”号,当然,在项目中使用的时候一般需要指定对哪个域名可以跨域、跨域的操作有哪些等等。这个在下面介绍。

这个时候又有新问题了,怎么回事呢?我都已经设置跨域了呀,怎么IE8、9还是不行呢?这个时候就有必要说说CORS的浏览器支持问题了。请看下面这张图:

上图描述了CORS的浏览器支持情况,可以看到IE8、9是部分支持的。网上说的解决方案都是Internet Explorer 8 、9使用 XDomainRequest 对象实现CORS。是不是有这么复杂?于是博主各种百度寻找解决方案。最后发现在调用处指定 jQuery.support.cors = true; 这一句就能解决IE8、9的问题了。具体是在Index.js里面

jQuery.support.cors = true;
var ApiUrl = "http://localhost:27221/";
$(function () {$.ajax({type: "get",url: ApiUrl + "api/Charging/GetAllChargingData",data: {},success: function (data, status) {if (status == "success") {$("#div_test").html(data);}},error: function (e) {$("#div_test").html("Error");},complete: function () {}});
});

CORS的具体参数设置

上文我们使用config.EnableCors(new EnableCorsAttribute(““, ““, “*”));
这一句解决了跨域问题,上面说了,这种*号是不安全的。因为它表示只要别人知道了你的请求url,任何请求都可以访问到你的资源。这是相当危险的。所以需要我们做一些配置,限制访问权限。比如我们比较常见的做法如下:

配置方法一、在Web.Config里面(PS:这两张图源自:http://www.cnblogs.com/moretry/p/4154479.html)

然后在WebApiConfig.cs文件的Register方法里面

配置方法二、如果你只想对某一些api做跨域,可以直接在API的类上面使用特性标注即可。

 [EnableCors(origins: "http://localhost:8081/", headers: "*", methods: "GET,POST,PUT,DELETE")]public class ChargingController : ApiController{/// <summary>/// 得到所有数据/// </summary>/// <returns>返回数据</returns>[HttpGet]public string GetAllChargingData(){return "Success";}}
PS:这篇笔记借鉴了http://www.cnblogs.com/landeanfen/p/5177176.html

WebApi跨域问题解决方案:CPRS相关推荐

  1. C#进阶系列——WebApi 跨域问题解决方案:CORS

    C#进阶系列--WebApi 跨域问题解决方案:CORS 参考文章: (1)C#进阶系列--WebApi 跨域问题解决方案:CORS (2)https://www.cnblogs.com/landea ...

  2. 跨域学习笔记2--WebApi 跨域问题解决方案:CORS

    自己并不懂,在此先记录下来,留待以后学习... 正文 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨 ...

  3. 详解SpringBoot应用跨域访问解决方案

    详解SpringBoot应用跨域访问解决方案 参考文章: (1)详解SpringBoot应用跨域访问解决方案 (2)https://www.cnblogs.com/zimug/p/11832737.h ...

  4. Nginx 解决WebApi跨域二次请求以及Vue单页面问题

    Nginx 解决WebApi跨域二次请求以及Vue单页面问题 参考文章: (1)Nginx 解决WebApi跨域二次请求以及Vue单页面问题 (2)https://www.cnblogs.com/ji ...

  5. PHP下ajax跨域的解决方案之CORS

    PHP下ajax跨域的解决方案之CORS 参考文章: (1)PHP下ajax跨域的解决方案之CORS (2)https://www.cnblogs.com/jkko123/p/6294625.html ...

  6. WebApi跨域的解决方法

    由于前段时间项目需求,需要用到WebApi跨域,我在网上也查阅很多这方面的资料,但是最终还是决定自己写一篇记录一下.       当一个请求url的协议.域名.端口三者之间任意一与当前页面地址不同即为 ...

  7. JSON Web Token(缩写 JWT) 目前最流行、最常见的跨域认证解决方案,前端后端都需要会使用的东西

    JSON Web Token(缩写 JWT)是目前最流行,也是最常见的跨域认证解决方案.无论是咱们后端小伙伴,还是前端小伙伴对都是需要了解. 本文介绍它的原理.使用场景.用法. 关于封面:这个冬天你过 ...

  8. 浏览器跨域访问解决方案

    浏览器跨域访问解决方案 2015年11月4日 18972次浏览 跨域的概念 跨域大家都知道,不同地址,不同端口,不同级别,不同协议都会构成跨域.例如:about.haorooms.com和www.ha ...

  9. JSON Web Token(缩写 JWT) 目前最流行的跨域认证解决方案

    JSON Web Token(缩写 JWT) 目前最流行的跨域认证解决方案 参考文章: (1)JSON Web Token(缩写 JWT) 目前最流行的跨域认证解决方案 (2)https://www. ...

最新文章

  1. linux 窗口z order,wxPython窗口z-order设置
  2. 【青少年编程】【一级】舞者凯希
  3. 如何压缩神经网络(将已经训练好的压缩)
  4. 数独求解 DFS DLX
  5. 这才是真正的Git——Git实用技巧
  6. mysql 文件放网络盘_MySQL InnoDB的磁盘文件及落盘机制
  7. Celery框架简单实例
  8. joo工作流_不要错过使用jOOλ或jOOQ编写Java 8 SQL单行代码的机会
  9. leetcode之回溯backtracing专题4
  10. 量化感知训练实践:实现精度无损的模型压缩和推理加速
  11. 虚机不能启动的特例思考
  12. linux内核进程抢占,Re: Linux中进程能否被抢占
  13. Segment Advisor
  14. 【机房收费系统C#版】——导出Excel
  15. [RK3288][Android6.0] 调试笔记 --- RT5640播放时的Codec寄存器列表
  16. 可变条码打印软件如何制作黑底白字条形码
  17. 2018年中国人均GDP接近1万美元,这在全球处于什么样的水平?
  18. 某去哪网,JS逆向:★★★★
  19. 商业图表案例9.2-麦吉尔大学博士生录取的严格把控
  20. Nicholas C. Zakas谈怎样才能成为优秀的前端工程师

热门文章

  1. oracle_____对列的常用操作
  2. windows下的libutp测试代码
  3. 50个经典Sql语句
  4. 毕业择业,真的有那么难吗?--看到一位大学生因毕业压力自杀有感
  5. 怪异报错:Wrong number of type arguments
  6. UIBezierPath设置图片圆角
  7. 《高性能网站建设指南》的阅读总结.
  8. python云服务器搭建教程_Python利用flask搭建一个共享服务器的步骤
  9. 股票证券软件测试简历,股票交易系统测试计划.doc
  10. html字典标签图片,HTML img 标签