问题背景:
前后端的交互的问题有很多,而跨域就是其中常见的一种。
比如我们要做一个项目,
- 前端使用JavaScript(不论你的http请求是通过axios或者jquery.ajax()等)。
- 后端是一个 .net core webapi的项目,也就是说是提供http接口的(如 类似“http://localhost:5000/api/values/get/1”这样的接口地),而这样的项目,一般是默认不允许跨域的,也就是说来自其他domain的请求是不予接受的。
- 此时如果前端使用了框架,如vue,假如说启动后使用的是 localhost:8080,那么从localhost:8080域发请求到 localhost:5000 域,那么这就是一个跨域,通常会失败。
解决方法
显然的,前端解决或后端解决。
前端解决的方法比如:
- jsonp (不细说了)
- vue项目里配置proxyTable(其实是代理)
后端解决方法:
- 配置后端项目,使之可以接受跨域请求
- 后端服务器做一个反向代理 ,接收请求并转发给真正的接口,比如使用nginx来转发。
这里要讲的方法就是 后端解决方法里的第一种,即配置后端项目,使之可接受跨域请求。
原理: 在此 .net core项目里设置一个允许跨域策略,并在相应的控制器或控制器方法中启用
环境:
windows10 64bit
visual studio 2017
.net core 2.2 webapi项目
做法:
1.startup.cs里面设置一个策略
代码:
2.在某个XxxController或具体方法上启用此策略
既可以在控制器上直接添加此Attribute,也可以在具体的控制器方法上添加,这个很显然。
3.也可写一个控制器基类,直接在基类上添加,则一次即可。
如图
RiskBaseController是基类,添加了允许跨域的策略。
AuthController是业务类,直接继承即可。
以上亲测可用。