CORS FOR AspNetCore
程序员文章站
2022-07-02 14:04:04
废话: 以前总是看别人博客,但是连评论都懒得给一个,于是心有愧疚,开始写写东西。本人不是科班出生的CODER,只是看多了,懂一些,了解一些思想,也不会动手CODING,也就把看到的换种话记录下来。最近了解了一下asp.net core 的pipeline,认识了CORS,这篇文章就是把关于CORS的 ......
废话:
以前总是看别人博客,但是连评论都懒得给一个,于是心有愧疚,开始写写东西。本人不是科班出生的CODER,只是看多了,懂一些,了解一些思想,也不会动手CODING,也就把看到的换种话记录下来。最近了解了一下asp.net core 的pipeline,认识了CORS,这篇文章就是把关于CORS的Microsoft知识文档用自己的话翻译一下。
正文:
参考:
https://docs.microsoft.com/en-us/aspnet/core/security/cors
CORS(Cross Origin Resource Sharing),是一种跨域资源共享方式,由于浏览器“same-origin"(同源同策)的限制,其在实际应用中产生,同是W3C标准
至于何为SAME-ORIGIN:
协议相同,比如http、https、file等 域相同,比如www.baiud.com 端口相同
如何使用CORS
使用方法一:全局应用
.net core 的CORS模块位于Microsoft.AspNetCore.Cors的nuget包
在asp.net core 中的services和middleware配置CORS
添加引用:
using Microsoft.AspNetCore.Cors
startup.cs
public void ConfigurationServices(IserviceCollection services) { services.AddCors() } public void Configure(IApplicationBuilder app,IHostingEnviroment env,ILoggerFactory loggerFactory) { app.UseCors(builder=> builder.WithOrigins("http://localhost:5000”); ); }
注意:
AddCors()优先于其他任何服务 builder.WithOrigins(url)的参数不能以‘/’结尾 builder有一些chain method ,是用于过滤请求的,可自行查阅
使用方法二:命名使用
先定义一个或多个CORS策略,在controller、class、function等对象上根据策略名字,在attribute中使用
startup.cs
public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy("AllowAOrigin", builder => builder.WithOrigins("http://example.com")); options.AddPolicy("AllowBOrigin", builder => builder.WithOrigins("http://example.com")) }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { app.UseCors("AllowAOrigin"); } //如果是MVC APP,只需要add service,不需要配置middleware
在attribute中使用CORS
[HttpGet] [EnableCors("AllowSpecificOrigin")] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; }
限制所有controller
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.Configure<MvcOptions>(options => { options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAOrigin")); }); }
到这里CORS基本用法差不多了,细节之处可见官网文档,英语好的可以自行看英文文档.至于这个东西在实际什么项目中怎么应用我也不清楚,不过我用在分离前后端上倒是好用。
推荐阅读
-
vue+springboot实现项目的CORS跨域请求
-
AspNetCore中使用Ocelot之 InentityServer4(1)
-
.Net Core Cors中间件解析
-
Spring boot 总结之跨域处理cors的方法
-
Spring boot 和Vue开发中CORS跨域问题解决
-
Asp.net Core CORS 跨域
-
跨域请求的完美解决方法(JSONP, CORS)
-
AspNetCore 多环境配置 以及注册 消费Consul
-
[AspNetCore 3.0 ] Blazor 服务端组件 Render, RenderFragment ,RenderTreeBuilder, CascadingValue/CascadingParameter 等等
-
Yii支持多域名cors原理的实现