2016-11-16 63 views
0

我想限制CORS請求到幾個特定的​​來源,但服務仍然向所有來源提供請求,而不僅僅是我指定的請求,並且我需要限制他們。Web API 2 CORS屬性不限制CORS請求

WebApiConfig.cs文件如下:

using System.Web.Http;  
using System.Web.Http.Cors; 
using System.Web.Http.OData.Builder; 
using System.Web.Http.OData.Extensions; 
using TCApiOdata.Models; 

namespace TCApiOdata 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API configuration and services 
      ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); 

      //Entities here, no issues, they work fine. 

      config.Routes.MapODataServiceRoute("odata", "odata", builder.GetEdmModel()); 
      // Web API routes 


      var cors = new EnableCorsAttribute("http://www.domain1.com,http://www.domain2.com", "*", "get", "DataServiceVersion, MaxDataServiceVersion"); 
      config.EnableCors(cors); 

      config.MapHttpAttributeRoutes(); 
      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
     } 

    } 
} 

我在做什麼錯誤是允許除了那些我指定其它產地的要求?我還應該注意到,我沒有任何控制器或操作上的裝飾......僅限於全局範圍。

回答

0

您是使用測試方法測試您的WebAPI嗎?即使啓用了CORS,Webapi也會返回所有請求的響應。問題是,如果Webapi請求源頭值與CORS中允許的源頭不匹配,則響應不會有源頭,因此瀏覽器安全將不允許顯示響應。如果你檢查與提琴手,你可以看到不同之處。所以CORS將由瀏覽器安全而不是在Webapi中處理。

0

我發現了修復,至少對於Azure App Service上託管的Web Api而言,與我的一樣。

首先,在Azure門戶中打開Web Api站點的App Service。如果您轉到CORS設置(在「API」部分下),則可以指定允許的來源,Azure確實會強制允許的來源。你也可以簡單地放一個*來允許所有的起源。