一、在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. Windows商店开发者注册失败

    前言 最近写了个小工具想上架Windows应用商店,但是在填写信息那一页总是失败,提示Error code 2201. Correlation ID 9d436e3a-94df-498a-b224-8 ...

  2. MASABlazor在移动端点击保持出现悬停样式

    提出问题 最近在学习MAUIBlazor,用的MASA Blazor,发现在移动端(触屏设备)上,点击会一直显示悬停样式,如下图所示,简单研究了一下,发现这是移动端的通病. 解决问题 MASABlaz ...

  3. 使用guestmount更改qcow2镜像内容

    参考: 使用guestmount更改qcow2镜像内容 guestmount 安装 yum install libguestfs libguestfs-tools -y 使用 guestmount - ...

  4. 2021-7-6 Vue实现记事本功能

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  5. maven系列:简介和安装配置(Mac、Linux、Windows、settings.xml、IDEA配置)

    目录 一.简介 二.安装 三.配置 Mac配置 Centos配置 Window配置 settings.xml配置 IDEA配置 一.简介 官网:https://maven.apache.org mav ...

  6. SpringBoot获取树状结构数据-SQL处理

    前言 在开发中,层级数据(树状结构)的获取往往可能是我们一大难点,我现在将自己获取的树状结构数据方法总结如下,希望能给有需要的小伙伴有所帮助! 一.测试数据准备 /* Navicat Premium ...

  7. springboot、jvm调优(设置运行的参数)

    1.工具 jdk自带的工具位置: 找到窗口->应用程序 2.问题和方式 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 2.1 springboot修改配置文件 ...

  8. Solution -「洛谷 P1852」跳跳棋

    Description Link. 在一个数轴上给你三个点,移动方法是彼此为中点进行跳跃,不能同时越过两颗棋子. 给出初始状态和目标状态,问能否从初始状态跳到目标状态.若能,输出最少步数. 棋子之间互 ...

  9. 一些H5对接微信JSSDK的问题记录

    这里给大家分享我在实际生活中总结出来的一些知识,希望对大家有所帮助 一.SDK引入 这里提供两套引入流程,一套是vue2.0及其他h5项目,一套是vue3.0的引入流程 不懂的也可以看我之前的一篇详细 ...

  10. 基于Java Swing和BouncyCastle的证书生成工具

    "Almost no one will remember what he had just not interested." - Nobody "几乎没有人会记得他所丝毫 ...