项目前后端分离,前端请求接口例如使用axios发送请求时浏览器会提示跨域错误,需要后端配置允许接口跨域

配置步骤:

1、通过NuGet安装Microsoft.AspNetCore.Cors.dll类库

2、在Startup.cs中的ConfigureServices方法加入以下配置

  1. services.AddCors(options =>
  2. {
  3. options.AddPolicy("CorsPolicy", builder =>
  4. {
  5. //builder.AllowAnyOrigin(); //客户端不携带cookie时,可以配置
  6. builder.WithOrigins(ConfigHelper.GetSectionModel<List<string>>("CorsOrigins").ToArray()); //客户端携带cookie、或者在请求报文定义其他字段属性时,必须指定域名
  7. builder.AllowAnyHeader();
  8. builder.AllowAnyMethod();
  9. builder.AllowCredentials();
  10. builder.SetPreflightMaxAge(TimeSpan.FromSeconds()); //如果接口已验证过一次跨域,则在60分钟内再次请求时,将不需要验证跨域
  11. });
  12.  
  13. });

3、在Startup.cs中的Configure方法加入以下配置

  1. app.UseCors("CorsPolicy");

注意:必须要加在app.UseMvc();前面

4、在appsettings.json配置可以跨域的域名:

  1. "CorsOrigins": [ "http://www.testseparateapi.com:8080", "http://localhost:8080" ]
  1. ConfigHelper读取appsettings.json工具类代码:
  1. /// <summary>
  2. /// appsettings.json配置文件帮助类
  3. /// </summary>
  4. public class ConfigHelper
  5. {
  6. static ConfigHelper()
  7. {
  8. Microsoft.Extensions.Configuration.IConfiguration config = AutofacHelper.GetService<Microsoft.Extensions.Configuration.IConfiguration>();
  9. if (config == null)
  10. {
  11. var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder().SetBasePath(AppContext.BaseDirectory).AddJsonFile("appsettings.json");
  12.  
  13. config = builder.Build();
  14. }
  15.  
  16. _config = config;
  17. }
  18.  
  19. private static Microsoft.Extensions.Configuration.IConfiguration _config { get; }
  20.  
  21. #region 从appsettings.json获取key的值
  22. /// <summary>
  23. /// 从appsettings.json获取key的值
  24. ///
  25. /// 列如:appsettings.json的格式如下
  26. ///
  27. /// {
  28. ///
  29. /// "Logging": {
  30. /// "LogLevel": {
  31. /// "Default": "Warning"
  32. /// }
  33. ///},
  34. /// "AllowedHosts": "*",
  35. /// "RabbitMQ": {
  36. /// "HostName": "111",
  37. /// "UserName": "11",
  38. /// "Password": "11",
  39. /// "ReTryCount": "5"
  40. /// }
  41. ///}
  42. ///
  43. /// 取RabbitMQ下的HostName的值,则参数key为 RabbitMQ:HostName
  44. ///
  45. /// </summary>
  46. /// <param name="key">key</param>
  47. /// <returns></returns>
  48. public static string GetValue(string key)
  49. {
  50. var rr = _config.GetSection(key).GetChildren();
  51.  
  52. return _config[key];
  53. }
  54. #endregion
  55.  
  56. #region appsettings.json 子节点转实体
  57. /// <summary>
  58. /// appsettings.json 子节点转实体
  59. /// </summary>
  60. /// <typeparam name="T"></typeparam>
  61. /// <param name="key">节点名称</param>
  62. /// <returns></returns>
  63. public static T GetSectionModel<T>(string key) where T : new()
  64. {
  65. var model = new T();
  66. _config.GetSection(key).Bind(model);
  67. return model;
  68. }
  69.  
  70. #endregion
  71.  
  72. /// <summary>
  73. /// 获取连接字符串
  74. /// </summary>
  75. /// <param name="nameOfCon">连接字符串名</param>
  76. /// <returns></returns>
  77. public static string GetConnectionString(string nameOfCon)
  78. {
  79. return _config.GetConnectionString(nameOfCon);
  80. }
  81. }

配置允许所有域名通过跨域,builder.AllowAnyOrigin(),客户端请求的时候携带cookie或者其他参数的时候出现以下错误,必须通过builder.WithOrigins()指定域名

asp.net core api 跨域配置的更多相关文章

  1. .Net Core Api 跨域配置

    .Net Core 和Asp.Net 不同,不需要再去引用其他的跨域组件.创建项目时,就有了. 让接口实现跨域,需要配置两个地方. 一.Startup.cs 这里需要配置两个地方 public voi ...

  2. ASP.NET Core 启用跨域请求

    本文翻译整理自:https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1 一 .Cross-Orig ...

  3. ASP.NET Web API 跨域访问(CORS)

    一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignatu ...

  4. asp.net web api 跨域问题

    缘起 以前在asp.net mvc时代,很少出现跨域问题 自从使用了asp.net web api + angular (1/2)之后,开始有跨域问题了. 简单普及下跨域: 我的理解是只要是前台页面与 ...

  5. ASP.NET Web API 跨域访问(CORS)要注意的地方

    一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignatu ...

  6. ASP.NET web api 跨域请求

    1.学习文章:AJAX 跨域请求 - JSONP获取JSON数据 1.asp.net代码 参考文章:http://www.sxt.cn/info-2790-u-756.html (1).增加CorsH ...

  7. .net core api 跨域

    什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制. 所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子: h ...

  8. Asp.net Core CORS 跨域

    本文主要介绍在Asp.net Core采用CORS方式解决跨域 关于跨域的原理介绍可参考Asp.net Web API 解决跨域详解 1 在Startup添加允许跨域的策略 services.AddC ...

  9. asp.net web api 跨域,带cookie

    官网上有一个介绍 http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api 但是只支 ...

随机推荐

  1. JAVA设计模式工厂模式

    工厂模式: – 实现了创建者和调用者的分离. – 详细分类: • 简单工厂模式 • 工厂方法模式 • 抽象工厂模式• 面向对象设计的基本原则: – OCP(开闭原则,Open-Closed Princ ...

  2. python 中问题,包括某些库的问题

    *)TypeError: exceptions must derive from BaseException 原因是raise语句没有写好 raise('value must between 0 an ...

  3. JDBC注册驱动程序3种方式

    以MySQL的驱动为例,介绍注册驱动程序的3种方式 1:Class.forName("com.mysql.cj.jdbc.Driver");// 加载数据库驱动 package c ...

  4. tomcat采坑

    1. tomcat采坑 1.1. 采坑 今天又踩了个以前踩过的坑,运维系统迁移到docker,使用的tomcat版本是tomcat8,而原来的版本是tomcat7.0.53,导致的结果就是系统间请求一 ...

  5. LabWindows/CVI第一章:基本规则

    一. #include<stdio.h>      //头文件,#号是预处理指令,standard input output header的缩写. void main()          ...

  6. 设计模式之代理模式(proxy pattern)

    代理模式的本质是一个中间件,主要目的是解耦合服务提供者和使用者.使用者通过代理间接的访问服务提供者,便于后者的封装和控制.是一种结构性模式. 1.目的 为外部调用者提供一个访问服务提供者的代理对象. ...

  7. React源码 ReactDOM.render

    在 react 当中,主要创建更新的有三种方式 1.ReactDOM.render || hydrate  这两个api都是要把这个应用第一次渲染到我们页面上面,展现出来整个应用的样子的过程,这就是初 ...

  8. PAT 乙级 1038.统计同成绩学生 C++/Java

    题目来源 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 1 的正整数 N,即学生总人数.随后一行给出 N 名学生的百分制整数成绩,中间以空 ...

  9. PAT 乙级 1032.挖掘机技术哪家强 C++/Java

    题目来源 为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 1 的正整数 N,即参赛人数.随后 ...

  10. webuploader大文件分片,多线程总结

    项目的新需求是用webuploader来做一个多文件,多线程,并且可以进行分块上传的要求,这些在前面的一篇文章当中足够使用了,但是现在又来一个新的需求,要求上传失败的文件进行重新的上传……心里默默说句 ...