官方说明

具体实践

  • 需要引入 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)入参为放行的源、请求头、请求方式。
    • 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”同上。
    • 在指定controller或方法上标注[EnableCors("CorsPolicy")],允许这些资源跨域访问。//“CorsPolicy”同上上。
  • 注意事项
    • 由于前端通常都会将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"

17.NET Core WebApi跨域问题的更多相关文章

  1. 连表查询都用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%我不知道在 ...

  2. Asp.Net SignalR 使用记录 技术回炉重造-总纲 动态类型dynamic转换为特定类型T的方案 通过对象方法获取委托_C#反射获取委托_ .net core入门-跨域访问配置

    Asp.Net SignalR 使用记录   工作上遇到一个推送消息的功能的实现.本着面向百度编程的思想.网上百度了一大堆.主要的实现方式是原生的WebSocket,和SignalR,再次写一个关于A ...

  3. sql的行转列(PIVOT)与列转行(UNPIVOT) webapi 跨域问题 Dapper 链式查询 扩展 T4 代码生成 Demo (抽奖程序)

    sql的行转列(PIVOT)与列转行(UNPIVOT)   在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比 ...

  4. C# webapi跨域

    C# webapi跨域   第一种在Web.config中<system.webServer>节点中配置(不支持多个域名跨域) 1 <httpProtocol> 2 <c ...

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

    前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨域问题一些细节. WebApi系列文章 C#进阶系列— ...

  6. WebApi 跨域问题解决方案:CORS

    注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/landeanfen/p/5177176.html 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看W ...

  7. C#进阶系列——WebApi 跨域问题解决方案:CORS(转载)

    C#进阶系列——WebApi 跨域问题解决方案:CORS   阅读目录 一.跨域问题的由来 二.跨域问题解决原理 三.跨域问题解决细节 1.场景描述 2.场景测试 四.总结 正文 前言:上篇总结了下W ...

  8. asp.net—WebApi跨域

    一.什么是跨域? 定义:是指浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制. 同源策略限制了以下行为: 1.Cookie.LocalStora ...

  9. 关于WebAPI跨域踩到的一点坑

    最近在尝试前后端分离的WebAPI+AngularJS方案,在率先处理授权的时候,踩到了一点WebAPI跨域的坑,其实严格意义上来说也不算是坑吧,只是我自己对WebAPI不熟悉而已,这里我与大家分享一 ...

随机推荐

  1. SSDB VS redis

    现在有不少团队开始使用了一个新型高效的 NoSQL数据库 - SSDB,如 京东.唱吧 …… SSDB 官网的定义 一个高性能的支持丰富数据结构的 NoSQL 数据库,用于替代 Redis 官网 ht ...

  2. Entity Framework Code-First(9.7):DataAnnotations - Table Attribute

    DataAnnotations - Table Attribute: Table attribute can be applied to a class. Default Code-First con ...

  3. hdu1069

    #include <iostream> #include <algorithm> #include <cstring> using namespace std; c ...

  4. 【mysql格式化日期】

    date_format(now(),'%Y-%c-%d'): 1. DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. DATE_FORMAT(date,format) format ...

  5. Dropout和学习率衰减

         Dropout 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象.在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上 ...

  6. 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 ...

  7. 51nod 1405【DFS】

    思路: 对于结点 u 的子节点 v, 如果已经一直到结点 u 的答案ans[u],那么转移到对于结点 v,num[v] 为 v为根的树的结点个数,那么对于结点v的答案相对于结点u的答案来说, ans[ ...

  8. 【转】processOnServer

    源地址:http://blog.csdn.net/dl020840504/article/details/8856853

  9. 浮点数与快速log2

    请先于浮点数的文章:http://blog.jobbole.com/86371/ 先贴一张关于float和double的图: float: double: 快速log2长这样: int flog2(f ...

  10. 2017-10-5 清北刷题冲刺班p.m

    套路(拓扑排序) /* 对每个联通块单独考虑. 每个联通块是一个环套树,树边拎出来可以随意定向,记树边为 m,所以树的方案数为2^m . 对于环来说只有两种方向,顺时针和逆时针,记环边为 n,所以环的 ...