通过javascript在两个项目和用户之间进行CORS

时间:2018-08-10 07:26:48

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

我有两个应用程序:

  • .NET Core 2.0中的WebAPI

  • .NET Core 2.0中的前端MVC,它使用JavaScript发送帖子请求。

由于某些原因,Firefox仅“接受”第一个请求,而由于CORS问题,其余请求被拒绝,同时Chrome的使用率更是达到50/50-一些请求通过并正确地从后端返回数据,但有些被阻止。 / p>

此外,虚拟机内部的所有内容都具有2x端口转发和2x反向代理

后端

  

主机:HOST_IP:55555转发到GUESTIP:80

前端

  

主机:HOST_IP:44444已转发到GUESTIP:44445

然后在vm nginx代理内部

  

端口80到:http://localhost:55659(后端应用程序)

     

将22222端口连接到http://localhost:63382(前端应用程序)

前端可以在浏览器中正确呈现,后端可以由邮递员访问并正确返回数据,有时请求可以在chrome中使用。

POST http://10.1.14.142:55555/test/test 400 (Bad Request)

vue-resource.js:1088 POST http://10.1.14.142:55555/test/test 400 (Bad Request)

:55555/test/test:1 POST http://10.1.14.142:55555/test/test 503 (Service Temporarily Unavailable)
test:1 Failed to load http://10.1.14.142:55555//test/test: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://10.1.14.142:44444' is therefore not allowed access. The response had HTTP status code 503.
Cross-Origin Read Blocking (CORB) blocked cross-origin response http://10.1.14.142:55555//test/test with MIME type text/html. See https://www.chromestatus.com/feature/5629709824032768 for more details.

vue-resource.js:1088 POST http://10.1.14.142:55555//test/test 400 (Bad Request)

如您所见,由于发送了空表单,一些请求已到达后端并返回BadRequest

这是我一直在尝试的所有内容:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options => options.AddPolicy("AllowAll", 
        p => p.AllowAnyOrigin()
        .AllowAnyMethod()
        .AllowAnyHeader())); 
    jwt...

    services
        .AddMvc()
        .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>());                                                          
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, Persistance.AppContext context)
{
    app.UseDeveloperExceptionPage();
    app.UseAuthentication();
    app.UseCors("AllowAll");
    app.UseMvc();
}

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();

    jwt...

    services
        .AddMvc()
        .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>());                                                          
}

with:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, Persistance.AppContext context)
{
    app.UseDeveloperExceptionPage();
    app.UseAuthentication();

    app.UseCors(builder => builder
        .WithOrigins("http://10.1.14.142:44444"));

    app.UseMvc();
}

or

public void Configure(IApplicationBuilder app, IHostingEnvironment env, Persistance.AppContext context)
{
    app.UseDeveloperExceptionPage();
    app.UseAuthentication();

    app.UseCors(builder => builder
            .WithOrigins("http://10.1.14.142:44444")
            .AllowAnyHeader()
            .AllowAnyMethod());

    app.UseMvc();
}

or

public void Configure(IApplicationBuilder app, IHostingEnvironment env, Persistance.AppContext context)
{
    app.UseDeveloperExceptionPage();
    app.UseAuthentication();

    app.UseCors(builder => builder
        .WithOrigins("http://10.1.14.142:44444")
        .AllowAnyOrigin()
        .AllowAnyHeader()
        .AllowAnyMethod());

    app.UseMvc();
}

有什么想法吗?预先感谢。

1 个答案:

答案 0 :(得分:0)

解决方案:

禁用NGINX的速率限制器。

该死,我浪费了很多时间。我希望这是一个实际的解决方案,并且不会在接下来的1小时内再次出现...

这是startup.cs:

app.UseCors
(
    builder => builder
    .AllowAnyOrigin()
    .AllowAnyMethod()
    .AllowAnyHeader()
);