ASP.NET Core教程-跨域配置(CORS Configuration)

news/2024/4/24 20:27:21/文章来源:https://www.cnblogs.com/cqpanda/p/16846544.html

更新记录
转载请注明出处:
2022年11月1日 发布。
2022年11月1日 从笔记迁移到博客。

说明

Cross-Origin Resource Sharing,跨域资源共享

配置方式

在ASP.NET Core中有2种方式配置跨越,中间件方式(middleware approach)特性修饰方式(attributes approach)

中间件方式一般用于配置全局的CORS配置。特性修饰方式配置跨域一般用于指定的控制器和动作。适用范围不同。

中间件方式配置Cors(Implementing CORS using the middleware approach)

开启UseCors() 中间件

具体实现实际上很简单,ASP.NET Core已经内置支持,只用开启 UseCors() 中间件即可。

打开Startup.cs文件,在配置开启CORS中间件即可。

namespace Catalog.API
{public class Startup{...public void Configure(IApplicationBuilder app, IWebHostingEnvironment env){...//开启CORSapp.UseCors(corsConfig =>{//具体的配置项corsConfig.AllowAnyOrigin();});..}}
}

配置具体的Cors规则(直接在中间件中配置)

配置允许所有的域名。

app.UseCors(corsConfig =>
{//允许所有域名corsConfig.AllowAnyOrigin();
});

配置允许指定的域名。其他域名都会被block。

namespace Catalog.API
{public class Startup{...public void Configure(IApplicationBuilder app, IWebHostingEnvironment env){...app.UseCors(corsConfig =>{//配置允许的域名corsConfig.AllowAnyOrigin("https://panda666.com");});   ...}}
}

配置具体的Cors规则(在服务中定义规则 Policy,在中间件中调用)

namespace Catalog.API
{public class Startup{public void ConfigureServices(IServiceCollection services){...//在服务中增加Cors服务services.AddCors(corsOtions =>{//增加 PolicycorsOtions.AddPolicy("BlogDomainPolicy", corsConfig => { //具体的配置项corsConfig.WithOrigins("https://samuele.dev"); });});..}public void Configure(IApplicationBuilder app,IWebHostingEnvironment env){...//在中间件中启用Cors,并使用指定策略app.UseCors("BlogDomainPolicy");...}}
}

在单独的扩展方法中定义Cors相关的配置

可以在ConfigureServices()中配置服务 和 Configure 配置中间件。为了提高可复用性、可维护性,还可以把相关的配置放入到自定义的扩展方法中。

在项目中添加Extensions文件夹。在Extensions文件夹下,添加ServiceCorsExtensions.cs类文件

image

然后在 ServiceCorsExtensions.cs 类文件中写入。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WebApplication6;
using Microsoft.Extensions.DependencyInjection;
namespace WebApplication6.Extensions
{public static class ServiceCorsExtensions{/// <summary>/// 配置跨域访问扩展方法/// </summary>/// <param name="services"></param>public static void ConfigureCors(this IServiceCollection services) =>//配置Corsservices.AddCors(options =>{options.AddPolicy("CorsPolicy", corsConfig =>corsConfig.AllowAnyOrigin() 	//配置允许的域名.AllowAnyMethod()   	//配置允许的HTTP方法.AllowAnyHeader()); 	//配置允许的头内容});}
}

说明:
AllowAnyOrigin()表示配置允许的域名,如果需要进行限制,可以使用WithOrigins("https://example.com")。
AllowAnyMethod()表示配置允许的HTTP方法,如果需要进行限制,可以使用WithMethods("POST", "GET")。
AllowAnyHeader()表示配置允许的头内容,如果需要进行限制,可以使用WithHeaders("accept", "contentype") 。

在Service中进行使用,在Startup.cs文件中的Startup类中
引入命名空间

using WebApplication6.Extensions;

配置服务,增加Cors服务。

public void ConfigureServices(IServiceCollection services)
{//添加服务,使用自定义的扩展方法services.ConfigureCors();services.AddControllers();
}

配置中间件,启动Cors中间件。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseHttpsRedirection();app.UseStaticFiles();//使用跨域app.UseCors("CorsPolicy");//...
}

特性方式配置Cors(Implementing CORS using the attribute approach)

使用特性方式配置Cors,只在指定的Controller和Action上生效。配置和使用中间件配置大同小异。同样是先配置服务,在配置中间件。然后在指定的控制器或者动作方法上加入[EnableCors]特性修饰即可。

配置服务,增加Cors服务,并新增一个Policy策略。

builder.Services.AddCors(options =>
{options.AddPolicy("PandaPolicy", policyConfig =>{policyConfig.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod();});
});

配置中间件,增加 Cors 中间件。

//启用Cors中间件
app.UseCors();

引入命名空间

using Microsoft.AspNetCore.Cors;

使用 [EnableCors] 特性启用,需要指定我们设置好的Policy策略。

namespace Catalog.API.Controllers
{[Route("api/items")][ApiController][JsonException][EnableCors("BlogDomainPolicy")]public class ItemController : ControllerBase{}
}

还可以在同一个控制器中,使用不同的 Policy 策略。

namespace Catalog.API.Controllers
{[Route("api/items")][ApiController][JsonException]//启用Cors[EnableCors("BlogDomainPolicy")]public class ItemController : ControllerBase{...[HttpGet("{id:guid}")]//启用Cors,策略不同[EnableCors("GetByIdActionPolicy")]public async Task<IActionResult> GetById(string id){...}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410201.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Jupyter Notebook中使用Matplotlib(Anaconda3)

Matplotlib&#xff08;官网 Matplotlib — Visualization with Python &#xff09;是一个用于创建二维图形的Python库&#xff0c;它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。将Jupyter Notebook于Matplotlib结合使用效果更好。 在Anaconda3的Jupyter …

HCL AppScan Standard漏洞扫描处理记录

官网&#xff0c;标准版应该是免费的&#xff0c;下载了标准版&#xff0c;没提示激活啥的&#xff0c;最近处理客户的漏洞扫描问题&#xff0c;主要就是修改nginx配置&#xff0c;各种查资料&#xff0c;不停的扫描验证&#xff0c;简单记录下吧。 APP简单使用 app快速下载地…

flutter 系列之:flutter 中的幽灵offstage

文章目录简介Offstage详解Offstage的使用总结简介 我们在使用flutter的过程中&#xff0c;有时候需要控制某些组件是否展示&#xff0c;一种方法是将这个组件从render tree中删除&#xff0c;这样这个组件就相当于没有出现一样&#xff0c;但是有时候&#xff0c;我们只是不想…

技术革新,取代传统会议模式?原来这么简单

随着AI人工智能的盛行&#xff0c;各领域面临前所未有的技术革新。人脸识别作为人工智能的一项重要技术&#xff0c;为工作及生活带来极大便捷&#xff0c;增效赋能。 人脸签到技术5大优势 01.人脸识别稳定&#xff0c;即使在光源不佳、角度受限的环境下也能精准识别&#xff1…

Libuv 各个回调(异步)事件的调用时机

Libuv 各个回调&#xff08;异步&#xff09;事件的调用时机 uv_close、uv_timer_start uv_close中注册的回调事件&#xff08;close_cb&#xff09;查阅官网API文档&#xff0c;Handle句柄是调用uv_close便会立即关闭&#xff0c;而注册的回调事件将推迟到下一次Loop循环中执…

设计模式——创建型模式

五大-创建型模式一、单例模式1、简介2、单例模式八种方式2.1、饿汉式&#xff08;静态常量&#xff09;2.2、饿汉式&#xff08;静态代码块&#xff09;2.3、懒汉式&#xff08;线程不安全&#xff09;2.4、懒汉式&#xff08;线程安全&#xff0c;加同步方法&#xff09;2.5、…

C2 实验 学习笔记

C2 实验 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. C2隐藏技术 CDN 准备 一台 vultr centos7 机器一个域名cloudflare 账号 挂上 cdn 在域名购买后配置&#xff0c;cf 中的域名解析&#xff0c;在 cf 中配置…

「MySQL高级篇」MySQL之MVCC实现原理事务隔离级别的实现

①MVCC定义,用处,快照读,当前读 ②MVCC实现原理:隐藏字段,readview,undo log ③readview访问规则 ④事务隔离级别的具体实现大家好,我是melo,一名大三后台练习生,死去的MVCC突然开始拷打我🤣🤣🤣!🍳引言 MVCC,非常顺口的一个词,翻译起来却不是特别顺口:多…

Fiddler 抓包工具

1 基本使用 官网下载地址&#xff1a;Download Fiddler Web Debugging Tool for Free by Telerik X.1 电脑端监听 我们双击打开软件&#xff0c;进入到如下的一个界面&#xff0c;然后点击某一个请求&#xff0c;你会发现请求的内容是一堆明显不对的文字&#xff0c;然后该请求…

MySQL性能优化和慢查询日志

目标 了解性能优化的方案能够使用慢日志定位慢SQL 讲解 1. 优化方案 1.1 为什么要优化数据库性能 ​ MySQL凭借着出色的性能、低廉的成本、丰富的资源&#xff0c;已经成为绝大多数互联网公司的首选关系型数据库。可以看到Google&#xff0c;Facebook&#xff0c;Twitter&…

【百度地图】百度地图的使用方法 和 在vue中如何使用百度地图(超详细)

【百度地图】百度地图的使用方法 和 在vue中如何使用百度地图&#xff08;超详细&#xff09; 1- 介绍 百度地图功能强大&#xff0c;本篇文章只是对百度地图JavaScript API 进行一个介绍~ 官方网址 百度地图开放平台LBS&#xff1a;LocationBusinessServer 基于定义位置的商…

Spark 离线开发框架设计与实现

一、背景 随着 Spark 以及其社区的不断发展&#xff0c;Spark 本身技术也在不断成熟&#xff0c;Spark 在技术架构和性能上的优势越来越明显&#xff0c;目前大多数公司在大数据处理中都倾向使用 Spark。Spark 支持多种语言的开发&#xff0c;如 Scala、Java、Sql、Python 等。…

Matlab神经网络函数newff()新旧用法差异

在Matlab R2010a版中,如果要创建一个具有两个隐含层、且神经元数分别为5、3的前向BP网络,使用旧的语法可以这样写:net1 = newff(minmax(P), [5 3 1]); 注意minmax()函数的使用,还有对输出层神经元数(1)的指定。当然也可以采用新的语法,更简洁(请留意差异):net2 = new…

形态分类行为中的气泡佯谬

“假设光归根结底是波&#xff0c;只是给我们以粒子的印象&#xff0c;因为粒子吸收光波的能量是以离散的包的方式。波从源头传播出去像一个越来越大正在膨胀的气泡&#xff0c;到达一个原子时&#xff0c;气泡破裂&#xff0c;波坍缩并把所有的能量集中在一个地方&#xff0c;…

【数字式时间继电器】TR-23 DC110V

系列型号 TR-20数字式时间继电器&#xff1b;TR-21数字式时间继电器&#xff1b; TR-22数字式时间继电器&#xff1b;TR-23数字式时间继电器&#xff1b; TR-24数字式时间继电器&#xff1b;TR-25数字式时间继电器&#xff1b; TR-20D数字式时间继电器&#xff1b;TR-21D数字式…

无刷电机控制基础(3)——FOC矢量控制入门

本节我们讲一些无刷电机FOC矢量控制的入门知识。 1&#xff09;FOC矢量控制的作用 我们前两节讲的无刷电机&#xff08;BLDC&#xff09;&#xff0c;是最简单的结构&#xff0c;当转子匀速转动时&#xff0c;定子内产生的反电动势是梯形波&#xff1b;在驱动无刷电机转动时&a…

你不知道的JavaScript-----强制类型转换

目录 值类型转换 抽象值的操作 JSON 字符串化 ToNumber&#xff1a; 非数字值到数字值 Number(value) ToBoolean: 转换为布尔类型 Boolean(value) 强制类型转换 字符串和数字之间的显式强制类型转换 奇特的~运算符 字位截除 显式解析数字字符串 显式转换为布尔值 隐…

Mybatis查询返回结果类型专题

文章目录一、返回一条信息二、返回List集合三、返回Map集合四、返回多个Map集合五、返回List集合一、返回一条信息 Student selectById(Long id); 不再赘述 二、返回List集合 List< Student> selectAll(); 不再赘述 三、返回Map集合 用map集合去接收返回来的结果 字…

Python-- list(列表)的使用

目录 1.合并两个有序序列构成一个有序列表 2.编写程序判断列表是否为升序 3.输入一个十进制转换为二进制输出 4.将列表中的前p个元素到尾列表 1.合并两个有序序列构成一个有序列表 代码如下&#xff1a; list1 list(eval(input("请输入有序列表list1:"))) list…

【飞桨PaddleSpeech语音技术课程】— 一句话语音合成全流程实践

(以下内容搬运自飞桨PaddleSpeech语音技术课程&#xff0c;点击链接可直接运行源码) 一句话语音合成全流程实践 点击播放视频 1 声音克隆介绍 & 语音合成基本概念回顾 语音合成&#xff08;Speech Sysnthesis&#xff09;&#xff0c;又称文本转语音&#xff08;Text-t…