ASPNETCOREAPI 跨域处理

AspNetCoreApi 跨域处理

如果咱们有处理过MV5 跨域问题这个问题也不大。

(1)为什么会出现跨域问题:

浏览器安全限制了前端脚本跨站点的访问资源,所以在调用WebApi 接口时不能成功访问资源,原因“同源策略”的存在:

同源指以下几点相同

          (1) IP地址/域名

          (2) 端口号

          (3) 网络协议)

          以上三点相同即为同源,浏览器将不做限制。

    (同源)   WebFrom 前台Ajax调用后台PageLoad页时 因为是在同一站点,以上三点均满足,也就不会出现跨域的问题。

    (不同源) 比如用微服务开发时,前台和微服务没有在同一台服务器上,虽然端口相同IP不同协议也相同,这时就会出现了跨域的问题了。

引用脚本时会有例外:

(2)文章以AspNetCore Api 为例

2.1:首先创建一个CoreAPI的项目(这个就不多说了)

  2.2:确保项目NuGet中引用 AspNetCore.ALL 里面包含 AspNetCore.Cors

 如果没有右击项目依赖项代开NuGet管理工具

           如图所示查找:

    2.3:在Startup.cs 文件的ConfigureServices方法中注入如下代码:

(1)第一种

services.AddCors(options => options.AddPolicy("Domain",

builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

"http://a.example.com", "http://c.example.com" 代表着允许访问的域,就好像给这个域开放了一个权限,允许访问的权限,可以写多个逗号分隔

        (2)第二种

services.AddCors(options => options.AddPolicy("Domain",

builder => builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

//AllowAnyMethod允许跨域策略允许所有的方法:GET/POST/PUT/DELETE 等方法 如果进行限制需要 AllowAnyMethod("GET","POST") 这样来进行访问方法的限制

//AllowAnyHeader允许任何的Header头部标题 有关头部标题如果不设置就不会进行限制

//AllowAnyOrigin 允许任何来源

//AllowCredentials 设置凭据来源

这里是重点不多说了:F12 查看源 阅读注释就明白了。

           在项目中可以写 多个services.AddCors() 需要注意的是 Domain1 的区别 咱们可以针对不同的限制些不同的 限制规则

复制代码

services.AddCors(options => options.AddPolicy("Domain1",

builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

services.AddCors(options => options.AddPolicy("Domain2",

builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

services.AddCors(options => options.AddPolicy("Domain3",

builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

services.AddCors(options => options.AddPolicy("Domain4",

builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

复制代码

为什么做这么多限制呢:其实大家每个请求都包含了很多内容:

                       比如:通过 抓包工具看到的每条请求所包含的请求信息

                      再比如:我们通过HTTP发送请求时进行的设置:下图举例还可以设置更多的设置,这些设置都可以通过

                                    services.AddCors()来进行设置:

                    2.4:在Startup.cs 文件中的Configure()方法中注册我们的   Domain

复制代码

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

app.UseCors("Domain1");

app.UseCors("Domain2");

app.UseCors("Domain3");

app.UseCors("Domain4");

}

复制代码

                  上面操作完之后我们就结束了准备任务现在可以进行使用了:使用方法如下:
2.5:使用如下:
(1)第一种 action

复制代码

[HttpGet("{OrderNO}/{BranchID}")]

//启用跨域

[EnableCors("Domain")]

public Object getMultipleOrderDetail(string OrderNO, int OrderNoType, string BranchID)

{

return vM.getMultipleOrderDetail(OrderNO, OrderNoType, BranchID);

}

复制代码

(2)第二种 控制器

//启用跨域

[EnableCors("Domain")]

[Produces("application/json")]

[Route("api/BorrowOrder/[action]")]

public class SP_PartsBorrowOrderController : Controller

{

2.6 :前台调用代码如下:

                   重点是:这个节点    xhrFields: { withCredentials:true //跨域请求中带cookie },//必须有这项的配置,不然cookie无法发送至服务端

复制代码

复制代码
本文是以 CORS 进行实现

NETCOREAPI 跨域处理的更多相关文章

  1. Ajax及跨域

    概念 Ajax Ajax,Asynchronous JavaScript and XML,字面意思:异步的 JavaScript 和 XML,是指一种创建交互式网页应用的网页开发技术. 用于异步地去获 ...

  2. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  3. ASP.NET Web API 跨域访问(CORS)

    一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignatu ...

  4. 解决cookie跨域访问

    一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...

  5. 关于python的bottle框架跨域请求报错问题的处理

    在用python的bottle框架开发时,前端使用ajax跨域访问时,js代码老是进入不了success,而是进入了error,而返回的状态却是200.url直接在浏览器访问也是正常的,浏览器按F12 ...

  6. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  7. 跨域问题,前端主动向后台发送cookie

    跨域是什么? 从一个域名的网页访问另一个域名的资源,就会出现跨域.只要协议.端口.域名有一个不同就会出现跨域 例如: 1.协议不同  http://www.baidu.com:80 和 https:/ ...

  8. Vue.js——基于$.ajax实现数据的跨域增删查改

    概述 之前我们学习了Vue.js的一些基础知识,以及如何开发一个组件,然而那些示例的数据都是local的.在实际的应用中,几乎90%的数据是来源于服务端的,前端和服务端之间的数据交互一般是通过ajax ...

  9. HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

    最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的 ...

随机推荐

  1. kvm初体验之六:克隆

    目标:克隆vm1到vm1-clone 1. virsh suspend vm1 2. virt-clone --connect qemu:///system --original vm1 --name ...

  2. phpunit 入门

    话说,使用phpunit还是处于好奇之心,为什么以前一直没使用呢?主要是嫌麻烦,小项目,前后端都是自己写,几个人就完成的工作,没必要弄的那么麻烦.好了,废话不多说,让我们一起来感受下phpunit吧! ...

  3. rand()与srand()

    1.不用srand()的话 两次运行程序产生的随机数序列相同 2.用srand() 两次运行程序产生的随机数则不同 示例程序: #include<iostream> #include< ...

  4. centos7搭建mysql-5.7.22主从复制

    mysql7.7.22主从复制 本项目是根据真实环境搭建编写出文档,文档中的目录也是根据自己公司环境所创建.公司原来是一台服务器搭建的数据库(5.7.22),由于业务的扩展需要搭建一台从服务器,减轻主 ...

  5. Meta viewport 学习整理

    The meta viewport tag contains instructions to the browser in the matter of viewports and zooming. I ...

  6. codeforces 706D D. Vasiliy's Multiset(trie树)

    题目链接: D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input ...

  7. HDU4080Stammering Aliens(后缀数组+二分)

    However, all efforts to decode their messages have failed so far because, as luck would have it, the ...

  8. AtCoder Grand Contest #026 B - rng_10s

    Time Limit: 2 sec / Memory Limit: 1024 MB Score : 600600 points Problem Statement Ringo Mart, a conv ...

  9. MySQL5.6中新增特性、不推荐使用的功能以及废弃的功能

    虽然已经使用MySQL5.6版本有一段时间了,但由于没有和之前的版本作过详细比较,所以对于哪些重要的或者不太重要的特性是在新版本中引入的,还有哪些特性已经或者将要从旧版本中移除的并没有一个十分全面的了 ...

  10. PowerShell 总结

    PowerShell 总结 1. 2. 3. 参考学习资料 (1). PowerShell 在线教程 (2). 利用Powershell在IIS上自动化部署网站 视频教程: (3). Windows ...