.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脚本和另一个域的内容进行交互. 会出现以下报错: 怎样属于非同源呢? 协议.域名.端口号只要有一个不相同就是属于非同源 ...
随机推荐
- Ubuntu18.04 软件源更新:图形界面
通过图形UI界面更新Ubuntu的软件源,手动修改虽然简单,但是要自己去找源,选一个系统配置好的更简单.但是新版的好像没有该功能,找到个奇葩的路径: 将Ubuntu16.04升级为Ubuntu18.0 ...
- rsync 命令
linux上的rsync命令详解 15个rsync命令实施 -z: --compress 使用压缩机制 -v: --verbose 打印详细信息 -r: --recursive 以递归模式同步子目录 ...
- 【go语言】2.3.2 error 接口
在 Go 语言中,error 是一个内置的接口类型,用于表示错误情况.error 接口的定义如下: type error interface { Error() string } 任何具有 Error ...
- Web通用漏洞--SSRF
Web通用漏洞--SSRF 漏洞简介 SSRF(Server-Side Request Forgery:服务器端请求伪造) 一种由攻击者构造形成由服务端发起请求的一个安全漏洞; 一般情况下,SSRF攻 ...
- BUUCTF Reverse-[FlareOn6]Overlong-动态调试
没有什么问题,直接进 三个函数,字符串也没啥特殊的 应该是个加密 返回上面分析 数据很大,你忍一下 也就是说它会找28位加密 然后我们接着分析 这个提示刚好28位 也就是说28位对应这个框 如果我们修 ...
- Java日志系列:Log4j使用和原理分析
目录 一.简介 二.使用 三.日志级别 四.组件说明 Loggers Appenders Layouts 五.配置 加载初始化配置 配置文件加载 查看日志记录器的详细信息 六.Layout的格式 七. ...
- 通过实战操作学git
虽然说 "好记性不如烂笔头",但是学习不看等于没学,学习不用等于不会,所以说"实战才是检验真理的唯一标准",通过实战则会学到很多东西. 因为陈** 太懒,并且不 ...
- 开源Word文字替换小工具更新 增加文档页眉和页脚替换功能
ITGeeker技术奇客发布的开源Word文字替换小工具更新到v1.0.1.0版本啦,现已支持Office Word文档页眉和页脚的替换. 同时ITGeeker技术奇客修复了v1.0.0.0版本因替换 ...
- 通过商品API接口获取到数据后的分析和应用
一.如果你想要分析商品API接口获取到的数据,可以按照如下的步骤进行: 了解API接口返回值的格式,如JSON格式.XML格式.CSV格式等,选择适合你的数据分析方式. 使用API请求工具(如Post ...
- SqlServer修改表字段类型
if not exists (select 1 from syscolumns where name='字段名' and id=OBJECT_ID('表名') and 条件) begin alter ...