NET Core接口跨域问题


一、什么是跨域

跨域问题来源于JavaScript的"同源策略",即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的,html本身没有跨域问题。

查看浏览器开发者工具Console报错:

Failed to load http://a.a.com:8080/A/FromServlet?userName=123: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://b.b.com:8080' is therefore not allowed access.

http://www.abc.com/a/b 调用 http://www.abc.com/d/c(非跨域)

http://www.abc.com/a/b 调用 http://www.def.com/a/b (跨域:域名不一致)

http://www.abc.com:8080/a/b 调用 http://www.abc.com:8081/d/c (跨域:端口不一致)

http://www.abc.com/a/b 调用 https://www.abc.com/d/c (跨域:协议不同)

请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

三、解决方案

接口跨域(接口跨域的话在Startup.cs文件中配置)

public void ConfigureServices(IServiceCollection services)
{

     services.AddCors(option =>
                      option.AddPolicy(_defaultCorsPolicyName, policy =>
                      policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin())
     );

AllowAnyHeader()--确保策略允许任何标头。

AllowAnyMethod()-- 确保策略允许任何方法。

AllowAnyOrigin()--确保策略允许任何来源。

AllowCredentials()-- 将策略设置为允许凭据。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{

     app.UseCors(_defaultCorsPolicyName);//启动 _defaultCorsPolicyName的程序!