cors - qidot/YunstpNetCore GitHub Wiki

跨域

1.配置service

public void ConfigureServices(IServiceCollection services)
{
    //...其他的代码段
    services.AddCors(
    options =>
    {
        options.AddPolicy("any", builder =>
        {
            builder.AllowAnyOrigin() //允许任何来源的主机访问
                   .AllowAnyMethod()
                   .AllowAnyHeader()
                   .AllowCredentials();//指定处理cookie
        });
    });
}

2.配置中间件

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors("any");  //跨域配置
}

3.配置路由特性

[EnableCors("any")]//跨域
public class BaseController : ControllerBase
{
        
}

这里我们定义一个基础控制器, 打上 支持跨域标签, 其他的控制器都继承在 BaseController 中,这样就不用在每个action上都写特性了。

按照一般的mvc模式呢,到这里应该已经可以实现跨域的请求了,如下图:

image-20190909091300766

不过,如果我们是用antd的开发框架,如:VUE,REACT,会在请求后端的时候,先OPTIONS一次,来预请求是否通畅,如下图:

image-20190909090208547

发现不成功,提示了方法不被支持,那如果我每个方法上都加上标签:

[HttpOptions("xxx")]

也是可以的,但是此方法,无疑是很蠢的,所以,还是需要对OPTIONS方法增加一个统一的支持

4.配置OPTIONS中间件

详细代码请查看: MyOptionsMiddleWare

//在中间件配置中增加
app.UseOptions();

5.再次尝试

image-20190909090627150

显示:200了,到这就成功实现了完整的跨域处理了