17.NET Core WebApi跨域问题
官方说明
- CORS means Cross-Origin Resource Sharing.
- Refer What is "Same Origin" Part
- Detailed Procedure
具体实践
- 需要引入 Microsoft.AspNetCore.Mvc.Cors 包
- Cors配置
- Startup.cs文件ConfigureServices方法中,将Cors服务放到容器中
- services.AddCors(options); 传一个options,指定名字并配置它,这个时候跨域并没有起作用。
- options可以对Origin、Header、Method进行指定,这些配置方式是fluent api。
- AllowAnyOrigin()表示允许任意的源、请求头、请求方式。
- 以配置AllowAnyOrigin()为例,响应头里会有Access-Control-Allow-Origin:*
- WithOrigins(string[] origins)入参为放行的源、请求头、请求方式。
- 以配置AllowAnyOrigin()为例,响应头里会有Access-Control-Allow-Origin:http://diagd.gridsumdissector.com
- AllowCredentials(),Response Header里会有Access-Control-Allow-Credentials:true
- Cors生效(三选一,推荐第一种)
- Startup.cs文件Config方法,给全局加上允许跨域,则所有的配置里允许的资源(多为controller中的接口)都可以跨域访问。
- app.UseCors("CorsPolicy"); //这里“CorsPolicy”是自定义的名字,在options中设定。
- Startup.cs文件ConfigureServices方法,给全局加上允许跨域,效果同上。
- services.Configure(options =>
options.Filters.Add(new CorsAuthorizationFilterFactory("CorsPolicy"))
); //“CorsPolicy”同上。
- services.Configure(options =>
- 在指定controller或方法上标注[EnableCors("CorsPolicy")],允许这些资源跨域访问。//“CorsPolicy”同上上。
- Startup.cs文件Config方法,给全局加上允许跨域,则所有的配置里允许的资源(多为controller中的接口)都可以跨域访问。
- 注意事项
- 由于前端通常都会将withCredential设置为true,所以配置时必须AllowCredentials()。
- XMLHttpRequest的withCredentials标志设置为true,则cookies可以随着请求发送。这时,如果服务器端的响应中,如果没有返回Access-Control-Allow-Credentials: true的响应头,那么浏览器将不会把响应结果传递给发出请求的脚本程序,以保证信息的安全。
- Access-Control-Allow-Origin这个头不允许使用通配符,即必须指定允许的域,用WithOrigins(string[] origins)方法,origins建议在appsettings.json文件配置。
- 如果一个目标域设置成了允许任意域的跨域请求,这个请求又带cookie的话,则请求不合法,浏览器会屏蔽掉返回的结果。(即如果需要实现带cookie的跨域请求,需要明确的配置允许来源的域,使用任意域的配置是不合法的。)这是cors模型最后一道防线。假如没有这个限制的话,那么javascript就可以获取返回数据中的csrf token,以及各种敏感数据。这个限制极大的降低了cors的风险。
- 在appsettings.json中配置origins时,务必指定scheme、domain、subdomain、port,且末尾千万不要加反斜杠。"http://localhost:6395"

- 由于前端通常都会将withCredential设置为true,所以配置时必须AllowCredentials()。
17.NET Core WebApi跨域问题的更多相关文章
- 连表查询都用Left Join吧 以Windows服务方式运行.NET Core程序 HTTP和HTTPS的区别 ASP.NET SignalR介绍 asp.net—WebApi跨域 asp.net—自定义轻量级ORM C#之23中设计模式
连表查询都用Left Join吧 最近看同事的代码,SQL连表查询的时候很多时候用的是Inner Join,而我觉得对我们的业务而言,99.9%都应该使用Left Join(还有0.1%我不知道在 ...
- Asp.Net SignalR 使用记录 技术回炉重造-总纲 动态类型dynamic转换为特定类型T的方案 通过对象方法获取委托_C#反射获取委托_ .net core入门-跨域访问配置
Asp.Net SignalR 使用记录 工作上遇到一个推送消息的功能的实现.本着面向百度编程的思想.网上百度了一大堆.主要的实现方式是原生的WebSocket,和SignalR,再次写一个关于A ...
- sql的行转列(PIVOT)与列转行(UNPIVOT) webapi 跨域问题 Dapper 链式查询 扩展 T4 代码生成 Demo (抽奖程序)
sql的行转列(PIVOT)与列转行(UNPIVOT) 在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比 ...
- C# webapi跨域
C# webapi跨域 第一种在Web.config中<system.webServer>节点中配置(不支持多个域名跨域) 1 <httpProtocol> 2 <c ...
- C#进阶系列——WebApi 跨域问题解决方案:CORS
前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨域问题一些细节. WebApi系列文章 C#进阶系列— ...
- WebApi 跨域问题解决方案:CORS
注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/landeanfen/p/5177176.html 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看W ...
- C#进阶系列——WebApi 跨域问题解决方案:CORS(转载)
C#进阶系列——WebApi 跨域问题解决方案:CORS 阅读目录 一.跨域问题的由来 二.跨域问题解决原理 三.跨域问题解决细节 1.场景描述 2.场景测试 四.总结 正文 前言:上篇总结了下W ...
- asp.net—WebApi跨域
一.什么是跨域? 定义:是指浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制. 同源策略限制了以下行为: 1.Cookie.LocalStora ...
- 关于WebAPI跨域踩到的一点坑
最近在尝试前后端分离的WebAPI+AngularJS方案,在率先处理授权的时候,踩到了一点WebAPI跨域的坑,其实严格意义上来说也不算是坑吧,只是我自己对WebAPI不熟悉而已,这里我与大家分享一 ...
随机推荐
- SSDB VS redis
现在有不少团队开始使用了一个新型高效的 NoSQL数据库 - SSDB,如 京东.唱吧 …… SSDB 官网的定义 一个高性能的支持丰富数据结构的 NoSQL 数据库,用于替代 Redis 官网 ht ...
- Entity Framework Code-First(9.7):DataAnnotations - Table Attribute
DataAnnotations - Table Attribute: Table attribute can be applied to a class. Default Code-First con ...
- hdu1069
#include <iostream> #include <algorithm> #include <cstring> using namespace std; c ...
- 【mysql格式化日期】
date_format(now(),'%Y-%c-%d'): 1. DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. DATE_FORMAT(date,format) format ...
- Dropout和学习率衰减
Dropout 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象.在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上 ...
- Codeforces Round #518 (Div. 2) D(计数DP)
#include<bits/stdc++.h>using namespace std;const long long mod=998244353;int n;int a[100007];l ...
- 51nod 1405【DFS】
思路: 对于结点 u 的子节点 v, 如果已经一直到结点 u 的答案ans[u],那么转移到对于结点 v,num[v] 为 v为根的树的结点个数,那么对于结点v的答案相对于结点u的答案来说, ans[ ...
- 【转】processOnServer
源地址:http://blog.csdn.net/dl020840504/article/details/8856853
- 浮点数与快速log2
请先于浮点数的文章:http://blog.jobbole.com/86371/ 先贴一张关于float和double的图: float: double: 快速log2长这样: int flog2(f ...
- 2017-10-5 清北刷题冲刺班p.m
套路(拓扑排序) /* 对每个联通块单独考虑. 每个联通块是一个环套树,树边拎出来可以随意定向,记树边为 m,所以树的方案数为2^m . 对于环来说只有两种方向,顺时针和逆时针,记环边为 n,所以环的 ...