什么是跨域问题

出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。由于这个原因,我们不同站点之间的数据访问会被拒绝。

Cors解决跨域问题

跨域资源共享( CORS )机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。它解决跨域问题的原理是通过向http的请求报文和响应报文里面加入相应的标识告诉浏览器它能访问哪些域名的请求。

解决跨域问题实例

下面就写一个简单是实例来说明如何使用CORS解决跨域

1、建立测试项目

1.1、新建两个ASP.NET Web 应用程序,作为Web站点和WebApi站点: 

1.2、配置WebApi站点 
在WebApiConfig.cs文件里面配置Web API 路由,指向具体的action

//Web API 路由
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(name: "DefaultApi1", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );

在控制器中新建一个测试方法,用于返回请求数据:

[Authorize]
[RoutePrefix("api/Account")]
public class AccountController : ApiController
{/// <summary> /// 得到所有数据 /// </summary> /// <returns>返回数据</returns> [HttpGet] public string GetAllData() { return "Success"; } }

启动Web API项目,站点端口号为:8476

1.3、配置Web站点 
新建一个index测试页面:

<html>
<head><meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/Scripts/jquery-1.10.2.min.js"></script> </head> <body> 测试结果: <div id="div_test"> hello world </div> </body> </html>
public ActionResult Index()
{return View();
}

用jquery 的 ajax处理请求:

<script>var ApiUrl = "http://localhost:8476/"; $(function () { $.ajax({ type: "get", dataType:"json", url: ApiUrl + "api/Account/GetAllData", data: {}, success: function (data, status) { if (data == "success") { $("#div_test").html(data); } }, error: function (e) { $("#div_test").html("Error"); }, complete: function () { } }); }); </script>
2、测试

在不做任何处理的情况下,运行Web项目,结果为: 

可以看到浏览器拒绝了我们的跨域访问。

3、使用CORS跨域

首先安装CORS,在WebApiCors项目上面使用Nuget搜索“microsoft.aspnet.webapi.cors”,安装第一个 
 
当我们安装这个包之后,现有的packages目录下会添加两个名称分别为“Microsoft.AspNet.Cors.5.2.3”和“Microsoft.AspNet.WebApi.Cors.5.2.3”,针对保存其中的两个程序集(System.Web.Cors.dll和System.Web.Http.Cors.dll)的引用被自动添加到WebApiCors项目中 

然后在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: "DefaultApi1", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); } }

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

重新运行: 
谷歌 

IE7、IE8、IE9 
 
我都已经设置跨域了呀,怎么IE7、8、9还是不行呢?这个时候就有必要说说CORS的浏览器支持问题了。网上到处都能搜到这张图: 

可以看到IE8、9只有部分浏览器支持,那么如何解决IE浏览器支持问题呢,其实在调用处指定 jQuery.support.cors = true; 这一句就能解决IE8、9的问题了:

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

4、CORS的具体参数设置。

上文我们用的是:config.EnableCors(new EnableCorsAttribute(““, ““, “*”));,这里的*号表示只要别人知道你的url,任何请求都能返回资源,这是不安全的,所以需要进行访问控制。 
配置方法一 
在Web.Config配置:

<appSettings><add key="cors:allowedMethods" value="*"/><add key="cors:allowedOrigin" value="http://localhost:8610"/> <add key="cors:allowedHeaders" value="*"/> </appSettings>

然后在WebApiConfig.cs文件配置

public static void Register(HttpConfiguration config)
{          //跨域配置 var allowedMethods = ConfigurationManager.AppSettings["cors:allowedMethods"]; var allowedOrigin = ConfigurationManager.AppSettings["cors:allowedOrigin"]; var allowedHeaders = ConfigurationManager.AppSettings["cors:allowedHeaders"]; var geduCors = new EnableCorsAttribute(allowedOrigin, allowedHeaders, allowedMethods) { SupportsCredentials = true }; config.EnableCors(geduCors); //config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

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

[EnableCors(origins: "http://localhost:8610/", headers: "*", methods: "GET,POST,PUT,DELETE")]
public class AccountController : ApiController { /// <summary> /// 得到所有数据 /// </summary> /// <returns>返回数据</returns> [HttpGet] public string GetAllData() { return "Success"; } }

转载于:https://www.cnblogs.com/hnsongbiao/p/9375997.html

c# WebApi之解决跨域问题:Cors相关推荐

  1. springboot解决跨域问题(Cors)

    springboot解决跨域问题(Cors) 参考文章: (1)springboot解决跨域问题(Cors) (2)https://www.cnblogs.com/owenma/p/8466856.h ...

  2. 什么是跨域(CORS)?怎么解决跨域(CORS)?

    什么是跨域(CORS)? 跨域是指浏览器不能执行其他网站上的脚本,它是由浏览器的同源策略造成的,是浏览器对 JS 的安全限制.是浏览器从一个域名网页请求另一个域名资源时,出现端口.域名.协议任一不同, ...

  3. chrome解决跨域(CORS)问题---chrome插件

    1.chrome浏览器 chrome中跨域问题,可以安装插件解决, 插件地址  https://chrome.google.com/webstore/detail/allow-control-allo ...

  4. ajax与微服务,微服务 - 如何解决跨域

    什么是跨域问题? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对 JavaScript 施加的安全限制. 什么是同源? 所谓同源是指,域名,协议,端口均相同 htt ...

  5. Nginx 方向代理解决跨域问题-2

    概述 在浏览器端进行 Ajax 请求时会出现跨域问题,那么什么是跨域,如何解决跨域呢?先看浏览器端出现跨域问题的现象,如下图所示 什么是跨域问题? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览 ...

  6. Golang解决跨域问题

    文章目录 1.什么是跨域 2.使用CORS解决跨域问题 2.1 简单请求 2.2 非简单请求 2.3 配置CORS以解决跨域问题 3.Golang解决跨域拦截 1.什么是跨域 由于浏览器的同源策略限制 ...

  7. Spring全家桶-Spring Security之跨域与CORS与防护

    Spring全家桶-Spring Security之跨域与CORS Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以 ...

  8. 无需CORS,用nginx解决跨域问题,轻松实现低代码开发的前后端分离

    近年来,前后端分离已经成为中大型软件项目开发的最佳实践. 在技术层面,前后端分离指在同一个Web系统中,前端服务器和后端服务器采用不同的技术栈,利用标准的WebAPI完成协同工作.这种前后端分离的&q ...

  9. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题

    继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...

  10. 深入跨域问题(2) - 利用 CORS 解决跨域

    阅读目录: 深入跨域问题(1) - 初识 CORS 跨域资源共享: 深入跨域问题(2) - 利用 CORS 解决跨域(本篇) 深入跨域问题(3) - 利用 JSONP 解决跨域 深入跨域问题(4) - ...

最新文章

  1. Python + Selenium 自动发布文章(二):简书
  2. 什么是同源策略及限制
  3. ASP.NET中应用的监视
  4. PrintWriter和Scanner的综合运用写文件并读文件
  5. 学电脑从新手到高手_小白如何学手绘插画?新手到高手必学的四套教程【614期】...
  6. 《第1集:机器学习的动机与应用》
  7. VTK:可视化之BackgroundTexture
  8. (急聘) 高级软件工程师(C#.Net/JS) http://job.cnblogs.com/offer/8966/
  9. STM32 - 定时器的设定 - 基础- 07 - 6-step PWM generation - 6步长PWM的产生 - COM Event的解释
  10. 用安卓设备通过otg完成电脑启动盘装机盘的制作,通过手机在U盘写入iso镜像
  11. 【大数据搜索引擎】网络爬虫南华实验报告(2021年版)
  12. breadweb控制台下载_路由器刷breed web控制台助手通用版下载
  13. ubntu系统克隆到其他计算机的方法
  14. kafka streams 中streams.errors.StreamsException: java.nio.file.DirectoryNotEmptyException
  15. 无人驾驶学习笔记-NDT 配准
  16. 中国石油大学《红楼梦研究》在线考试
  17. 软件测试2小时入门-曹红杏-专题视频课程
  18. 开源社区“大牛”关于“开源”的大讨论
  19. 学渣的刷题之旅 leetcode刷题 27.移除元素
  20. OpenCV~捕获摄像头 帧率fps和waitkey函数 问题

热门文章

  1. 【大数据部落】R语言RFM模型在电商行业的应用
  2. sama5做linux的sd卡启动u盘,windows中service.msc与regedit
  3. android从本地图片导入应用,android – 将图像添加到图库
  4. BCELoss和BCEWithLogitsLoss
  5. pytorch与Keras对应模型Sequential()和add()
  6. 【论文笔记】Depth Map Prediction from a Single Image using a Multi-Scale Deep Network
  7. python求解在给定递减数组中寻找两个数和等于定值,乘积最小
  8. 局部内部类使用局部变量应注意什么?
  9. java的argv_Java:使用org.apache.commons.cli解析传入参数args,该包会协助解析argv参数...
  10. 为什么天才容易患阅读障碍症_王俊凯因“耳石症”缺席跨年晚会,这种病与熬夜玩手机有关?...