官方说明

具体实践

  • 需要引入 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. linux日常管理-防火墙netfilter工具-iptables-2

    分别是包的数量:26  包的字节:1320  处理方式 tcp协议  opt in out  源ip 目标ip 到80端口的行为. 处理行为处理有REJECT外 还有DROP ACCEPT.分别是看一 ...

  2. Java探索之旅(16)——异常处理

    1.异常与异常处理 在<java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来 ...

  3. ubuntu14.04装完系统更新后桌面挂了

    一开始是只显示个鼠标什么都没有,ctrl-alt-1切到控制台下,把lightdm重启下再进去,多了两个桌面图标,但是顶栏和侧栏都没有,也就是根本没法运行其它程序. 但是幸好桌面右键菜单里有一个“在控 ...

  4. HTML中的ID不能以数字开头

    最近在学习网页制作,发现ID在w3c规范里是不能以一个数字开头的,chrome浏览器是可以,firefox就不能使用数字开头了,其它浏览器未测试. 记录一下! W3C规范链接:http://www.w ...

  5. iObjects for java +weblogic

  6. jeecms v8 网站访问量配置

    <script src="${resSys}/jquery.js" type="text/javascript"></script> & ...

  7. iscsi使用教程(上)

    服务端 服务器环境 已经安装过qemu-img的32位ubuntu $ uname -a Linux ubuntu-virtual-machine 3.13.0-46-generic #76-Ubun ...

  8. Beta博客总结

    描述项目预期计划和现实进展 冲刺 时间 预期任务以及预估时间 现实完成情况以及实际用时 冲刺1 12.4 修改等级答题界面:30,修改获取用户信息接口:30 修改等级答题界面:60,修改获取用户信息接 ...

  9. elementary os变成mac风(笔记)

    sudo add-apt-repository ppa:philip.scott/elementary-tweaks && sudo apt-get update sudo apt-g ...

  10. 菜鸟眼中的”AppSettings和ConnectionStrings“

    前言 这次的机房收费系统重构,我们用到了这个配置文件.瞬间感觉高大上了许多,对新鲜的事务就是又陌生又好奇,通过看静静的博客,还有自己查资料花了点时间弄了弄,下面是我整理的结果. 内容 是什么 AppS ...