.Net Core 3.1 服务端配置跨域
一、在Startup.cs 的 ConfigureServices 配置好跨域策略
public void ConfigureServices(IServiceCollection services)
{
//添加cors
services.AddCors(options =>
{
//添加core 策略
options.AddPolicy("Policy1", //策略名
builder =>
{
builder.WithOrigins("*", //表示可以被所有地址跨域访问
"http://localhost:3000",//允许跨域访问的地址,不能以正反斜杠结尾。
"http://*.localhost:3001")
.SetIsOriginAllowedToAllowWildcardSubdomains()//设置策略里的域名允许通配符匹配,但是不包括空。
//例:http://localhost:3001 不会被通过
// http://xxx.localhost:3001 可以通过
.AllowAnyHeader()//配置请求头
.AllowAnyMethod();//配置允许任何 HTTP 方法访问
});
//添加另外一个 core 策略 添加多个策略可以为不同域名的源进行配置。 策略名不能重复
options.AddPolicy("Policy2",
builder =>
{
builder.WithOrigins("http://www.contoso.com")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
services.AddControllers();
}
二、在Startup.cs 的 Configure开启跨域。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseRouting();
//使用cors,注意中间件的位置位于UseRouting与UserAuthorization之间
app.UseCors();//此处如果填写了app.UserCors("Policy1"),则控制器中默认使用该策略,并且不需要在控制器上添加[EnableCors("Policy1")] app.UseAuthorization(); app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
三、在控制器中设置跨域策略。
在微软的文档中,可以配置通用跨域,即无需编写跨域策略,开启所有源都可以跨域访问,则无需在控制器中设置是否开启跨域。
这里使用的方法,可以对每个控制器和Action 都可以设置是否允许跨域,更为安全灵活
1.在控制器类上添加[EnableCors("Policy1")] 属性。
[ApiController]
[Route("[controller]")]
[EnableCors("Policy1")] //表示在该控制器下所有Action 都可被满足“Policy1”策略的源跨域访问。
public class WeatherForecastController : ControllerBase
{
[HttpGet]
public string Get(){
return "get";
} [HttpPost]
public string Post() {
return "post";
}
}
表示在该控制器下所有Action 都可被满足“Policy1”策略的源跨域访问。
2.在Action 方法上添加[EnableCors("Policy1")] 属性。
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
[EnableCors("Policy1")] //表示Get方法可以被满足“Policy1”策略的源跨域访问,而同控制器下的Post方法不可。
[HttpGet]
public string Get(){
return "get";
} [HttpPost]
public string Post() {
return "post";
}
}
表示Get方法可以被满足“Policy1”策略的源跨域访问,而同控制器下的Post方法不可。
3.在控制器基类中添加[EnableCors("Policy1")] 属性
//基类
[EnableCors("Policy1")]
public class BaseController:ControllerBase
{ }
//控制器类
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : BaseController
{
[HttpGet]
public string Get(){
return "get";
} [HttpPost]
public string Post() {
return "post";
}
}
此时WeatherForecastController 继承次添加了 [EnableCors("Policy1")]属性的 BaseController,所以WeatherForecastController 下的所有Action 都可被满足“Policy 1” 策略的源访问。
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : BaseController
{
[HttpGet]
public string Get(){
return "get";
} [HttpPost]
public string Post() {
return "post";
} [DisableCors]
[HttpDelete]
public string Delete() {
return "delete";
} }
此时delete方法因添加[DisabelCors] 属性 而不启用所属控制器从父类继承过来的跨域策略。
四、CORS 策略选项(配置cors策略时可以设置)
设置允许的 HTTP 方法
options.AddPolicy("Policy1",
builder =>
{
builder.WithOrigins("http://localhost:3000")
.WithMethods("POST","DELETE");//允许所有则直接使用:AllowAnyMethod()
});
设置允许的请求标头
options.AddPolicy("Policy1",
builder =>
{
builder.WithOrigins("http://localhost:3000")
.WithHeaders(HeaderNames.ContentType, "x-custom-header");
//当设置WithHeaders时,请求源的标头需与设置的标头完全匹配 策略才能生效。
//允许所有则直接使用:AllowAnyHeader()
});
.Net Core 3.1 服务端配置跨域的更多相关文章
- asp.net core webapi 服务端配置跨域
在前后端分离开发中服务端仅仅只为前端提供api接口,并且前后端往往单独部署,此时就会出现浏览器跨域问题.asp.net core提供了简单优雅的解决方案. 在startup文件的Configure添加 ...
- php服务端允许跨域访问
>>php服务端允许跨域访问<< >>同源策略和跨域解决方案<<
- PHP服务端支持跨域
跨域 由于浏览器的同源策略,导致浏览器页面访问非同源(协议.域名.端口任一不同)服务器产生跨域问题! PHP服务端配置支持跨域: // 指定允许其他域名访问, * 表示全部域名 header('Acc ...
- php 服务端允许跨域访问
加上需要允许跨域访问,配置如下(一下配置内容前不允许有其他任何输出操作): //设置允许跨域的 请求源地址//方式一:header("Access-Control-Allow-Origin: ...
- [django]django配合前端vue前后端联调,django服务端解决跨域(django-cors-headers)
django内部csrf post提交数据解决 https://www.cnblogs.com/iiiiiher/articles/9164940.html 前端写了个页面,里面$.post发现403 ...
- nodejs设置服务端允许跨域
//设置跨域访问 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", ...
- Asp.Net WebApi服务端解决跨域方案
1.特性方式 主要是继承ActionFilterAttribute,重写OnActionExecuted方法,在action执行后,给响应头加上一个键值对. using System.Web.Http ...
- Orleans[NET Core 3.1] 学习笔记(三)( 3 )服务端配置
服务端配置 Silo通过SiloHostBuilder和许多补充选项类以编程方式进行配置. Silo配置有几个关键方面: Orleans集群信息 集群提供程序(不知道咋翻译) Silo到Silo和Cl ...
- mpush 服务端配置 for windows 服务自动运行
mpush 服务端配置 以下安装部分是参照官方的步骤, 一.安装jdk1.8并配置环境变量 示例: http://www.cnblogs.com/endv/p/6439860.html 二.Wind ...
- .net core 配置跨域
使用场景: 由于浏览器的同源策略,即浏览器的安全功能,同源策略会阻止一个域的js脚本和另一个域的内容进行交互. 会出现以下报错: 怎样属于非同源呢? 协议.域名.端口号只要有一个不相同就是属于非同源 ...
随机推荐
- Vortex Indicator 构建交易策略
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 今天的文章,我们将为大家介绍一个与DMI(Directional Movement Index)类似,判 ...
- 在langchain中使用带简短知识内容的prompt template
简介 langchain中有个比较有意思的prompt template叫做FewShotPromptTemplate. 他是这句话的简写:"Prompt template that con ...
- html中的一些常用标签与标签属性
label for属性 定义和用法 for 属性规定 label 与哪个表单元素绑定. <span> <label for="username">用户账号& ...
- WEB前端资源网站推荐
https://www.bootcss.com/ https://www.bootcdn.cn/ http://www.jeasyui.net/plugins/756.html
- 让nodejs开启服务更简单--express篇
上一篇文章说到,nodejs获取客户端请求需要我们自己去处理请求参数.请求方式等,而在express框架内部集成了很多好用的方法,我们不需要从0开始编写各种处理逻辑,这样可以极大提高我们的开发效率~ ...
- chrome浏览器中使用adblockplus拦截广告
adblock plus是一款可以屏蔽广告以及任何你想屏蔽元素的软件,屏蔽之后的效果如下图所示,abp自动屏蔽广告,还可以自行添加屏蔽内容,右上角红色的ABP标识就是该软件 下载地址: htt ...
- [db2]缓冲池管理
简介 缓冲池指的是从硬盘读取表和索引数据时,数据库管理器分配的用于高速缓存这些表和索引数据的内存区域.每个数据库都必须具有至少一个缓冲池,创建数据库时会自动创建一个名为IBMDEFAULTBP的缓冲池 ...
- 关于package-lock.json
前言 上篇文章我们了解了package.json,一般与它同时出现的还有一个package-lock.json,这两者又有什么关系呢?下面一起来了解吧. 介绍 package-lock.json 它会 ...
- quarkus依赖注入之十二:禁用类级别拦截器
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<quarkus依赖注入> ...
- 一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 问题现象 7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值8 ...