2016-10-18 11 views
2

Web APIプロジェクトでCORSを理解し、有効にするのは非常に難しいです。私はブロッキングポイントにヒットしました。私は、ASP.NET IDを持つASP.NET MVC Web Api 2プロジェクトを開始しました。私が何をしてもうまくいかないようです。Web api 2.0でCorsが動作しません

私はglobal.asxファイルを削除したし、私のスタートアップが次のようになります。

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
      HttpConfiguration configuration = new HttpConfiguration(); 
      // I'm not sure it this is the proper way to use webapiconfig 
      WebApiConfig.Register(configuration); 
      app.UseWebApi(configuration); 
      app.UseCors(CorsOptions.AllowAll); 
      ConfigureAuth(app); 
    } 
} 

とWebApiConfig.Registerコードは次のとおりです。

public static void Register(HttpConfiguration config) 
{ 
    // Web API configuration and services 
    // Configure Web API to use only bearer token authentication. 
    config.SuppressDefaultHostAuthentication(); 
    config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 
    config.AddODataQueryFilter(); 

    // Web API routes 
    config.MapHttpAttributeRoutes(); 

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

    var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First(); 
    jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
    RegisterModels(); //Automapper here 
} 

私は、MCのASPNET CORSとMicrosoft owinホストを持っていますシステムWebがインストールされています。 "[アセンブリ:OwinStartup(typeof演算(MyProject.Startup))]" web.configに私が持っている場所にされ、そして:

<appSettings> 
    <add key="owin:AutomaticAppStartup" value="true" />   
</appSettings> 

私だけ呼んでapp.UseCors(CorsOptions.AllowAll)がCORSを有効にするために、他config.enableCorsまたは何か他のもののような方法はありませんが、私はAPIにトークンまたは何かを取得しようとするたびに、私はエラーを取得する:

Reason: CORS header ‘Access-Control-Allow-Origin’ missing.

私はConfigurationメソッドにブレークポイントを入れて試してみましたが、それは呼び出されません。 ..まったく。私はIIS Expressでデバッグしています。

答えて

3

何も私のために働いていません。多くの試みの後、ついに私は何か動作するようになった。

あなたは同じ問題を抱えている場合

..

1)。。すべてをインストールナゲットパッケージからCORSに関連するものを除きます。

2)web.configからcorsに関連するものをすべて削除します。 Gloabal.asax

protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     var context = HttpContext.Current; 
     var response = context.Response; 

     response.AddHeader("Access-Control-Allow-Origin", "*"); 
     response.AddHeader("X-Frame-Options", "ALLOW-FROM *"); 

     if (context.Request.HttpMethod == "OPTIONS") 
     { 
      response.AddHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PATCH, PUT"); 
      response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
      response.AddHeader("Access-Control-Max-Age", "1000000"); 
      response.End(); 
     } 
    } 

3)この研究/ API及び/トークンの両方のために。 これは一般的なソリューションであり、プロダクトに展開する前に注意してください。

希望は、同じ問題を抱えている人を助けるでしょう。

+0

それは私のために働いた唯一の解決策です。ありがとう! – alvipeo

+0

本当にありがとうございます。プロダクションデプロイメントのために何をすべきですか? – Lobato

+0

こんにちはロバート、どこから来たのか分かっていれば、そのサイトの原点で*を変更してください。 *は「どこでも」を意味するためです。また、いくつかのapisは原点の外から 'GET'しか許さず、CRUD操作にツールを使わなければなりません。ブラウザー固有の値によって上書きされるため、変更する 'Access-Control-Max-Age'を無視することができます。 (Chromeでは10分以内)。 –

関連する問題