问题背景:
前后端的交互的问题有很多,而跨域就是其中常见的一种。

比如我们要做一个项目,

  1. 前端使用JavaScript(不论你的http请求是通过axios或者jquery.ajax()等)。
  2. 后端是一个 .net core webapi的项目,也就是说是提供http接口的(如 类似“​​http://localhost:5000/api/values/get/1”这样的接口地​​),而这样的项目,一般是默认不允许跨域的,也就是说来自其他domain的请求是不予接受的。
  3. 此时如果前端使用了框架,如vue,假如说启动后使用的是 localhost:8080,那么从localhost:8080域发请求到 localhost:5000 域,那么这就是一个跨域,通常会失败。

解决方法

显然的,前端解决或后端解决。

前端解决的方法比如:

  1. jsonp (不细说了)
  2. vue项目里配置proxyTable(其实是代理)

后端解决方法:

  1. 配置后端项目,使之可以接受跨域请求
  2. 后端服务器做一个反向代理 ,接收请求并转发给真正的接口,比如使用nginx来转发。

这里要讲的方法就是 后端解决方法里的第一种,即配置后端项目,使之可接受跨域请求。


原理: 在此 .net core项目里设置一个允许跨域策略,并在相应的控制器或控制器方法中启用

环境:
windows10 64bit
visual studio 2017
.net core 2.2 webapi项目

做法:

1.startup.cs里面设置一个策略

.net core 的webapi项目,怎样设置服务端允许跨域_.net


代码:

 services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowAnyOrigin()
.AllowCredentials());
});

2.在某个XxxController或具体方法上启用此策略

.net core 的webapi项目,怎样设置服务端允许跨域_跨域_02


既可以在控制器上直接添加此Attribute,也可以在具体的控制器方法上添加,这个很显然。

3.也可写一个控制器基类,直接在基类上添加,则一次即可。

如图

.net core 的webapi项目,怎样设置服务端允许跨域_解决方法_03


.net core 的webapi项目,怎样设置服务端允许跨域_.net core 跨域_04


RiskBaseController是基类,添加了允许跨域的策略。

AuthController是业务类,直接继承即可。

以上亲测可用。