2016-11-16 7 views
0

CORS要求をいくつかの特定の起点に限定しようとしていますが、サービスは依然として指定したものだけでなくすべての起点に対する要求を処理しています。それら。Web API 2 CORS属性はCORS要求を制限していません

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 } 
      ); 
     } 

    } 
} 

は私が間違って何をやっていることは、私が指定したもの以外の他の起源からの要求を許可され、次のよう

WebApiConfig.csファイルはありますか?また、コントローラやアクションにはデコレーションがないことにも注意してください。グローバルスコープのみです。

答えて

0

テスト方法を使用してWebAPIをテストしていますか? CORAPを有効にしても、Webapiはすべての要求に対して応答を返します。問題は、WebAPIがCORSの許可された起点に一致しない原点ヘッダー値を要求した場合、その応答に起点ヘッダーがないため、ブラウザセキュリティが応答を表示できなくなります。あなたがフィドラーにチェックした場合、違いを見ることができます。したがってCORSはWebapiではなくブラウザのセキュリティによって処理されます。

0

少なくともAzure App ServiceでホストされているWeb Apiの場合、私のように修正が見つかりました。

まず、AzureポータルでWeb ApiサイトのApp Serviceを開きます。 CORS設定(「API」セクションの下)に行くと、許可された起点を指定することができ、Azureは実際に許可された起点を強制します。また、すべての起点を許可するために*を付けることもできます。

関連する問題