一、跨域问题的由来

出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求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. 原来安全也能像足球那么踢的
  2. Applications模块解析(一)
  3. 拉格朗日c语言实验报告,拉格朗日插值法C语言的实现(实验报告)(9页)-原创力文档...
  4. 机器学习实践:onnx模型转为Tensorflow2的pb模型2020
  5. minion java上传文件_Java程序员如何快速理解Kubernetes
  6. jenkins java jar_Jenkins 安装和配置、启动jar包
  7. 空间中任一点到超平面的距离公式的推导过程
  8. 汇编语言输出斐波那契数列
  9. 阿里云Ubuntu系统部署K8s集群
  10. html制作带有尖角的边框,纯CSS3制作带尖角的气泡对话框实例特效代码
  11. 黑莓BlackBerry 模拟器上浏览网页
  12. 机顶盒抓包(无法连接WIFI的设备)
  13. 中国的RFID产业何时才能统一标准
  14. JAVA AJAX教程第一章-初始AJAX
  15. FlexRay关注事项2_网络总线资源分配问题
  16. Web APIs第01天笔记——Web API介绍
  17. JVM 新生代老生代
  18. 【JY】代码|极简反应谱分析
  19. 【flutter】 集成HMS需要将证书文件打包到APK中,请直接将assets目录拷贝到应用工程根目录。
  20. 学术写作(Scientifi Academic Writing in English)

热门文章

  1. 镜头像差之五——畸变
  2. ROS学习笔记(十三)—— URDF 模型文件学习
  3. MIT、北大、浙大、港大的四位讲者分享大模型前沿研究,畅聊ChatGPT
  4. 关于H3C交换机使用时的一些常用的配置命令
  5. 谈谈对《神武2》经济的一些看法
  6. 英雄联盟队友给你发的这七个信号,你真的懂是什么意思么?
  7. 中国力车胎市场营销策略分析及投资前景展望研究报告2022-2028年版
  8. linux系统下的归档与压缩
  9. 2022年二级建造师建筑安装工程费用项目的组成与计算试题及答案
  10. 挖一个深坑在那里找寻宝藏