2017-06-12 23 views
5

我已經爲我的網站使用了兩個項目。一個用於Mvc項目和Api項目。 我已經添加下面的web.config文件是在API項目的代碼,使用跨域的標題無法通過ajax

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 

操作方法如下這是在API項目,

[HttpPost] 
[Route("api/ajaxapi/caselistmethod")] 
public List<CaseValues> AjaxCaseListMethod() 
{ 
      List<CaseValues> caseList = new List<CaseValues>(); 
      return caseList; 
} 

和Ajax調用,如下是在MVC項目,

$.ajax({ 
      type: "POST", 
      url: "http://localhost:55016/api/ajaxapi/caselistmethod", 
      beforeSend: function (request) { 
       request.setRequestHeader("Authorization", getCookie("Token")); 
      }, 
      success: function (response) { 
      } 
}); 

但尚未顯示如下錯誤,

OPTIONS http://localhost:55016/api/ajaxapi/caselistmethod 405(方法不允許) XMLHttpRequest無法加載http://localhost:55016/api/ajaxapi/caselistmethod。預檢的響應具有無效的HTTP狀態代碼405

但沒有標題其工作正常。我還需要傳遞標題。所以請給出任何建議。

謝謝...

回答

3

選項方法需要在「選項」飛行前的請求成功,而這又需要發送授權頭被啓用。

目前尚不清楚您如何在Web.Config中啓用標頭,或者您使用什麼來託管您的服務,因此很難提出確切的解決方案。如果您正在使用IIS檢出 - enabling cross-origin resource sharing on IIS7以確保OPTIONS未被IIS阻止。您可能需要刪除現有的處理程序或啓用選項。

或者,您可以在該方法上使用EnableCors屬性以允許爲該路線啓用「選項」。

+0

最後得到了解決方案,你救了我的時間..感謝@Alexei –

1

Chrome會發送預檢請求(OPTIONS方法)來查找CORS標頭,然後發送POST請求。

但是你不允許OPTION方法。

嘗試

Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS 
+1

我不相信'接入控制允許Methods'影響405從OPTIONS請求本身。您不需要將「OPTIONS」添加到此列表中,因爲不太可能使OPTIONS跨域呼叫(在瀏覽器之前,OPTIONS呼叫不被視爲「跨域」,因爲它是由瀏覽器本身而非客戶端代碼構成的) –

+0

允許OPTIONS方法後也不會發生任何事情。 @ S.Dev –