2017-09-06 70 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

相關問題