asp.net Core MVC 2-配置CORS以接受NULL来源

时间:2019-03-20 16:01:32

标签: c# asp.net-core .net-core cors asp.net-core-mvc

我需要配置一个使用asp.net core 2.2实现的Web api,以接受“空”来源(“ Origin”标头丢失或为空)。

在您跳下嗓子之前:我知道原点为空是不好的。但是不幸的是,我对此无能为力,因为调用是由传递了空原点的第三方服务器进行的,并且我无法控制它,因此我需要使我的api接受空原点。

我尝试这样做:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseHsts();
    app.UseMvc();
    app.UseCors(options => options.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());
}

...

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    //Configuring CORS
    services.AddCors();
}

,但没有任何区别。当我发出POST请求(使用jQuery的ajax方法)时,出现以下错误:

enter image description here

我怀疑一个空/缺失的原点在检查之前就被丢弃了……对吗?有什么方法可以接受空原点吗?

2 个答案:

答案 0 :(得分:4)

必须将CORS中间件放在MVC中间件之前,否则MVC中间件(和您的控制器)将发送响应,而不会允许CORS中间件运行。

将您的配置方法更改为此:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseHsts();
    app.UseCors(options => options.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());
    app.UseMvc(); // Add this middleware last.
}

AddMvc方法中AddCorsConfigureServices的顺序无关紧要。

答案 1 :(得分:0)

好,我解决了。问题非常简单:必须在UseCors()AddCors()方法之前调用Startup类中的UseMvc()AddMvc()方法。