2017-09-06 76 views
1

我正在使用Web Core API并按如下方式设置CORS;在ASP.NET中,对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头

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

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
var url = Configuration["origenUrl"]; 
      var header = "Content-Type"; 
      app.UseCors(
       options => options.WithOrigins(url).WithHeaders(header).AllowAnyMethod().AllowCredentials() 
      ); 
     } 

此设置适用于获取请求。 但对于我的要求;

$.ajax({ 
     url: url, 
     method: "PUT", 
     xhrFields: { withCredentials: true } 
    }) 
     .done(callback) 
     //.fail(errorMessage); 
     .fail(function (jqXHR, textStatus, errorThrown) { 
      alert("Something went wrong: " + textStatus + " " + errorThrown); 
      errorCallback(); 
     }); 

我得到这个错误信息;

XMLHttpRequest无法加载http://localhost:17972/api/fault/1/close

对预检请求的响应未通过访问控制检查:否 请求的 资源上存在“访问控制允许来源”标头。原因'http://localhost:12528'因此不允许 访问。该响应具有HTTP状态代码401.

从Fiddler我的http请求是;

OPTIONS http://localhost:17972/api/fault/10/close HTTP/1.1

接受:/

产地:http://localhost:12528

访问控制请求-方法:PUT

访问控制 - 请求 - 标题:接受

UA-CPU:AMD64

接受编码:gzip,放气

的User-Agent:Mozilla的/ 5.0(Windows NT的10.0; Win64平台; 64;三叉戟/ 7.0; RV:11.0)等壁虎

主机:本地主机:17972

的Content-Length:0

DNT:1个

连接:保持活动

附注:无缓存

那么我该如何解决这个问题?

编辑 我也试过这段代码只是为了让它工作,但我得到了同样的错误;

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
      //var url = Configuration["originUrl"]; 
      //app.UseCors(
      // options => options.WithOrigins(url).AllowAnyHeader().AllowAnyMethod().AllowCredentials() 
      //); 
      app.UseCors(
       options => options.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().AllowCredentials() 
      ); 
      app.UseMvc(); 
} 
+0

您是否添加了内容类型? –

+0

我将“Content-Type”放在标题变量中,然后将其包含在WithHeaders方法中,如代码中所示。此后我尝试了“AnyHeader()”,结果相同。 – arame3333

+0

对不起,我没有这么解释,我是在谈论这个请求。你有一个原始的HTTP请求? –

回答

0

尝试用AllowAnyHeader而不是WithHeaders,它必须工作。 问题是您需要“Content-Type”标题,但未被发送。 如果你想保持WithHeaders检查,添加“访问控制请求方法”。

更多信息:https://docs.microsoft.com/en-us/aspnet/core/security/cors

+0

我试过,但无济于事。我一直在看链接 - 这是一个很好的链接 - 有一段时间试图找出我能做的事情。 – arame3333

+0

您也可以避免使用库并在web.config中添加cors规则:https://enable-cors.org/server.html –

+0

尝试让它工作我现在使用AllowAnyOrigin(),但这并不能解决问题 – arame3333

相关问题