2016-11-08 43 views
0

我試圖從JS/Ajax向我的WebAPI發出請求時遇到問題。在我的解決方案中,我有一個在srv02:2400上發佈的Web API和在srv02上發佈的我的網站:2300如何允許CORS for ASP.NET

當我導航到頁面http://srv02:2300/all-requests.aspx時,頁面加載正常,除了應該發送的數據形成我的API

,我得到的錯誤:

XMLHttpRequest cannot load http://srv02:2400/api/requests/find/1. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://srv02:2300' is therefore not allowed access. The response had HTTP status code 400. 

但是,如果我把網址http://srv02:2400/api/requests/find/1並粘貼到瀏覽器中,它讓我正確的JSON清單!

我試圖在全球範圍內啓用CORS的建議here在我的API是:

  1. 安裝包Microsoft.AspNet.WebApi.Cors
  2. 由addding以下更新我的WebApiConfig.cs :

    var cors = new EnableCorsAttribute(「http://srv02:2400」,「」,「」); config.EnableCors(cors);

但是,這沒有奏效。

正如我前面提到的,我做我的請求作爲阿賈克斯多個請求

$.ajax({ 
     url: "http://srv02:2400/api/requests/find/" + id, 
     type: "GET", 
     dataType: 'json', 
     contentType: 'application/json', 
     success: function (requests) { 
      console.log('success'); 
     }, 
     error: function (err) { 
      if (err) { 
       console.log(err); 
      } 
     } 
    }); 

我試圖改變JSON來JSONP作爲建議here,但沒有奏效。

任何有關如何解決問題的想法。

謝謝!

回答

1

您的全局屬性看起來不正確。

我想你想改變兩件事情。

  • 你CORS網址應該是要允許應用程序(不是你的API URL)的URL,即:2300:2400
  • 您選擇了無效的標題和方法(動詞)。你需要在這裏使用特定的值,或者*(如果你正在全球應用這可能更有意義)。

如您想以下幾點:

var cors = new EnableCorsAttribute("http://srv02:2300", "*", "*"); 
config.EnableCors(cors); 

這應該指示瀏覽器(使用OPTIONS響應),如果他們想從http://srv02:2300/*任何動詞或標題,其確定調用此API。如果另一個域試圖調用這個API,它就不會好。

+0

哦..我的壞..這是正確的 – Riad

+0

謝謝盧克! – Riad

+0

@riad沒問題 –