利用cors中间件处理跨源问题。
首先,什么是跨域(跨源)问题:
是指不同站点之间,使用ajax无法相互调用的问题。跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。 这个就是我们常说的同源策略(协议,域名,端口都相同就是同源)
解决跨域问题:让后端允许自己访问。
工作原理:服务器在返回响应报文的书一样,在响应头设置一个允许的header。
在响应报头添加Access-Control-Allow-Origin标签。从而允许指定域的站点访问当前域上的资源。
c# cors中间件设置指定源允许访问。 —在startup.cs文件中设置
public void ConfigureServices(IServiceCollection services)
{//增加cors中间件到应用到服务器中,类似配置服务器services.AddCors(options =>{options.AddPolicy(name: MyAllowSpecificOrigins,policy =>{//设置允许的协议和域名//.AllowAnyOrigin() 允许所有源policy.WithOrigins("http://example.com","http://www.contoso.com”)//设置所允许的请求头.AllowAnyHeader() //设置所允许的方法.AllowAnyMethod();;});});// services.AddResponseCaching();services.AddControllers();
}
//在configure文件中加入 —启用中间件 这句话必须放在userouting之后,useauthorization之前
//这是所有的接口都启用
app.UseCors(MyAllowSpecificOrigins);
c# 使用跨源策略
除了上面的在configure文件中 app.UseCors(MyAllowSpecificOrigins);
直接允许所有的接口都适用中间件外,也能指定接口用哪个跨源策略。
ps:注意这句话必须放在userouting之后,useauthorization之前
这些都是在configureservices中设置完跨源策略之后用的。(可以设置多个跨源策略,命名不同)
1.使用属性跨源
//在控制器里,写路径的地方
// GET api/values
[EnableCors("AnotherPolicy")]
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{ return new string[] { "green widget", "red widget" };
}
2.通过终结点路由启用
//在configure中调用控制器的地方
endpoints.MapGet("/echo”, context => context.Response.WriteAsync("echo")) .RequireCors(MyAllowSpecificOrigins);
致此:希望大家不要跟我一样懒,且畏惧尝试。respect!