一、在Startup.cs 的 ConfigureServices 配置好跨域策略

原文链接:https://www.jianshu.com/p/534b9a6a6ed5

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 服务端配置跨域的更多相关文章

  1. asp.net core webapi 服务端配置跨域

    在前后端分离开发中服务端仅仅只为前端提供api接口,并且前后端往往单独部署,此时就会出现浏览器跨域问题.asp.net core提供了简单优雅的解决方案. 在startup文件的Configure添加 ...

  2. php服务端允许跨域访问

    >>php服务端允许跨域访问<< >>同源策略和跨域解决方案<<

  3. PHP服务端支持跨域

    跨域 由于浏览器的同源策略,导致浏览器页面访问非同源(协议.域名.端口任一不同)服务器产生跨域问题! PHP服务端配置支持跨域: // 指定允许其他域名访问, * 表示全部域名 header('Acc ...

  4. php 服务端允许跨域访问

    加上需要允许跨域访问,配置如下(一下配置内容前不允许有其他任何输出操作): //设置允许跨域的 请求源地址//方式一:header("Access-Control-Allow-Origin: ...

  5. [django]django配合前端vue前后端联调,django服务端解决跨域(django-cors-headers)

    django内部csrf post提交数据解决 https://www.cnblogs.com/iiiiiher/articles/9164940.html 前端写了个页面,里面$.post发现403 ...

  6. nodejs设置服务端允许跨域

    //设置跨域访问 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", ...

  7. Asp.Net WebApi服务端解决跨域方案

    1.特性方式 主要是继承ActionFilterAttribute,重写OnActionExecuted方法,在action执行后,给响应头加上一个键值对. using System.Web.Http ...

  8. Orleans[NET Core 3.1] 学习笔记(三)( 3 )服务端配置

    服务端配置 Silo通过SiloHostBuilder和许多补充选项类以编程方式进行配置. Silo配置有几个关键方面: Orleans集群信息 集群提供程序(不知道咋翻译) Silo到Silo和Cl ...

  9. mpush 服务端配置 for windows 服务自动运行

    mpush 服务端配置 以下安装部分是参照官方的步骤, 一.安装jdk1.8并配置环境变量 示例:  http://www.cnblogs.com/endv/p/6439860.html 二.Wind ...

  10. .net core 配置跨域

    使用场景: 由于浏览器的同源策略,即浏览器的安全功能,同源策略会阻止一个域的js脚本和另一个域的内容进行交互. 会出现以下报错: 怎样属于非同源呢? 协议.域名.端口号只要有一个不相同就是属于非同源 ...

随机推荐

  1. Centos查看挂载目录并挂载

    一.概述 本次已Centos7作为示例 挂载系统没有挂载的磁盘,可以分如下几步 1.查看系统哪些盘未挂载 2.给未挂载的磁盘进行分区 3.格式化磁盘并向磁盘中写入系统文件 4.挂载磁盘 5.设置开机自 ...

  2. IRF技术介绍及配置介绍

    IRF技术介绍及配置介绍 IRF(Intelligent Resilient Framework,智能弹性架构)是 H3C 自主研发的软件虚拟化技术. 它的核心思想是将多台设备通过 IRF 物理端口连 ...

  3. Win10 下 tensorflow-gpu 2.5 环境搭建

    Win10 下 tensorflow-gpu 2.5 环境搭建 简介 机器学习环境搭建,tensorflow_gpu-2.5.0 + CUDA 11.2 + CUDNN 8.1 :环境必须是这个,具体 ...

  4. BugKu:文件包含+php伪协议

    这道题一进去发现一个超连接点击后发现跳转到了如下页面url如下/index.php?file=show.php,觉得这道题应该是一个php伪协议的应用 1 php://filter php://fil ...

  5. 剪切图片, 原文自https://blog.csdn.net/sinat_41104353/article/details/85209456

    因为在 OpenCV2 里面,所有的东西都是 numpy array 即 np.ndarray1,所以使用 opencv 剪切图像主要原理是用 ndarray 的切片.一张图片基本上都是三维数组:行, ...

  6. 静态vlan的划分

    静态vlan的划分 1,toupu图 2,配置id与子网掩码 2.1,pc,server的ip与子网配置 pc5 pc6 pc7 pc8 server1 server2 3,vlan的静态划分 1,v ...

  7. UI通过元素定位实现特定区域截图

    最近计划做一个自动截图的工具,目的是实现性能测试资源监控平台(grafana)各硬件资源的自动截图,解放手工操作.前期的截图做了如下探索. 1. 整个页面截图 1.1 代码实现 通过save_scre ...

  8. redis集群:MASTER aborted replication with an error: NOAUTH Authentication required.

    发现个问题:redis集群所在服务器,磁盘空间很快就被占满,使用 "du -sh *"查看每个文件夹的大小,发现redis集群三个从节点的日志文件占用空间很大. 下面记录问题排查及 ...

  9. Redis系列18:过期数据的删除策略

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...

  10. vue中添加音频和视频

    视频播放功能 1. 安装vue-video-player npm install vue-video-player --save 或 yarn add vue-video-player --save ...