asp.net core api 跨域配置
项目前后端分离,前端请求接口例如使用axios发送请求时浏览器会提示跨域错误,需要后端配置允许接口跨域
配置步骤:
1、通过NuGet安装Microsoft.AspNetCore.Cors.dll类库
2、在Startup.cs中的ConfigureServices方法加入以下配置
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder =>
{
//builder.AllowAnyOrigin(); //客户端不携带cookie时,可以配置
builder.WithOrigins(ConfigHelper.GetSectionModel<List<string>>("CorsOrigins").ToArray()); //客户端携带cookie、或者在请求报文定义其他字段属性时,必须指定域名
builder.AllowAnyHeader();
builder.AllowAnyMethod();
builder.AllowCredentials();
builder.SetPreflightMaxAge(TimeSpan.FromSeconds()); //如果接口已验证过一次跨域,则在60分钟内再次请求时,将不需要验证跨域
}); });
3、在Startup.cs中的Configure方法加入以下配置
app.UseCors("CorsPolicy");
注意:必须要加在app.UseMvc();前面
4、在appsettings.json配置可以跨域的域名:
"CorsOrigins": [ "http://www.testseparateapi.com:8080", "http://localhost:8080" ]
ConfigHelper读取appsettings.json工具类代码:
/// <summary>
/// appsettings.json配置文件帮助类
/// </summary>
public class ConfigHelper
{
static ConfigHelper()
{
Microsoft.Extensions.Configuration.IConfiguration config = AutofacHelper.GetService<Microsoft.Extensions.Configuration.IConfiguration>();
if (config == null)
{
var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder().SetBasePath(AppContext.BaseDirectory).AddJsonFile("appsettings.json"); config = builder.Build();
} _config = config;
} private static Microsoft.Extensions.Configuration.IConfiguration _config { get; } #region 从appsettings.json获取key的值
/// <summary>
/// 从appsettings.json获取key的值
///
/// 列如:appsettings.json的格式如下
///
/// {
///
/// "Logging": {
/// "LogLevel": {
/// "Default": "Warning"
/// }
///},
/// "AllowedHosts": "*",
/// "RabbitMQ": {
/// "HostName": "111",
/// "UserName": "11",
/// "Password": "11",
/// "ReTryCount": "5"
/// }
///}
///
/// 取RabbitMQ下的HostName的值,则参数key为 RabbitMQ:HostName
///
/// </summary>
/// <param name="key">key</param>
/// <returns></returns>
public static string GetValue(string key)
{
var rr = _config.GetSection(key).GetChildren(); return _config[key];
}
#endregion #region appsettings.json 子节点转实体
/// <summary>
/// appsettings.json 子节点转实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">节点名称</param>
/// <returns></returns>
public static T GetSectionModel<T>(string key) where T : new()
{
var model = new T();
_config.GetSection(key).Bind(model);
return model;
} #endregion /// <summary>
/// 获取连接字符串
/// </summary>
/// <param name="nameOfCon">连接字符串名</param>
/// <returns></returns>
public static string GetConnectionString(string nameOfCon)
{
return _config.GetConnectionString(nameOfCon);
}
}
配置允许所有域名通过跨域,builder.AllowAnyOrigin(),客户端请求的时候携带cookie或者其他参数的时候出现以下错误,必须通过builder.WithOrigins()指定域名

asp.net core api 跨域配置的更多相关文章
- .Net Core Api 跨域配置
.Net Core 和Asp.Net 不同,不需要再去引用其他的跨域组件.创建项目时,就有了. 让接口实现跨域,需要配置两个地方. 一.Startup.cs 这里需要配置两个地方 public voi ...
- ASP.NET Core 启用跨域请求
本文翻译整理自:https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1 一 .Cross-Orig ...
- ASP.NET Web API 跨域访问(CORS)
一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignatu ...
- asp.net web api 跨域问题
缘起 以前在asp.net mvc时代,很少出现跨域问题 自从使用了asp.net web api + angular (1/2)之后,开始有跨域问题了. 简单普及下跨域: 我的理解是只要是前台页面与 ...
- ASP.NET Web API 跨域访问(CORS)要注意的地方
一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignatu ...
- ASP.NET web api 跨域请求
1.学习文章:AJAX 跨域请求 - JSONP获取JSON数据 1.asp.net代码 参考文章:http://www.sxt.cn/info-2790-u-756.html (1).增加CorsH ...
- .net core api 跨域
什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制. 所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子: h ...
- Asp.net Core CORS 跨域
本文主要介绍在Asp.net Core采用CORS方式解决跨域 关于跨域的原理介绍可参考Asp.net Web API 解决跨域详解 1 在Startup添加允许跨域的策略 services.AddC ...
- asp.net web api 跨域,带cookie
官网上有一个介绍 http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api 但是只支 ...
随机推荐
- 【linux】【windows】查看你想访问的电脑Ip 和 端口是否 通畅
常用查看IP是否通畅: 使用ping命令 ping 117.173.218.23 既想看IP又想看端口:使用telnet命令 telnet 117.173.218.23 9000 注意格式!!!
- python输入一个字符串,输出翻转后的字符串(翻转字符串)
题目:输出一个字符串,输出翻转后的字符串.例如:输入字符串a123,输出321a. 方法一:使用列表的reverse方法 string=input('请输入一个字符串:') lst=list(stri ...
- C# static readonly 修饰符初始化变量
同事问了一个问题,readonly和static啥区别? 我就写了个demo运行了下: /*** * 验证初始化次数:static只初始化一次,无论多少用户访问,在内存中只有一份 * readonly ...
- 构造命题公式的真值表--biaobiao88
对给出的任意一个命题公式(不超过四个命题变元),使学生会用C语言的程序编程表示出来,并且能够计算它在各组真值指派下所应有的真值,画出其真值表. #include<iostream> usi ...
- Java 之 JDK 1.8 新增日期时间类型
一.原来的日期时间 Java1.0中包含了一个Date类,但是它的大多数方法已经在Java 1.1引入Calendar类之后被弃用了.而Calendar并不比Date好多少.它们面临的问题是: ① 可 ...
- [转] QML PinchArea
本文转自安老师的博文:Qt Quick 事件处理之捏拉缩放与旋转 绪论 本文介绍在Android 等智能手机上的一个非常重要的手势:捏拉手势. 捏拉手势最早在苹果手机上得到应用,苹果还曾经尝试为此操作 ...
- 源码升级SUSE openssh
1.check old opensslrpm -q opensslopenssl versionwhich opensslwhereis opensslls /etc/ssl 2.backup old ...
- MySQL事务优化
====================事务特性 事务隔离级别 事务控制语句 MySQL优化==================== 事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全 ...
- Django 学习笔记之模型高级用法
目录 1 复杂的字段类型 1.1 整数类型的区别 1.2 自增类型的区别 1.3 时间类型 1.4 FilePathField 1.5 FileField 1.6 ImageField 2 关系字段 ...
- 【转】Linux内存管理(最透彻的一篇)
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法.力求从外到内.水到渠成地引导网友分析Linux的内存管理与使用.在 ...