2017-06-08 21 views
3

私はC#のターゲット.NET Framework 4.5.1で作成されたサーバー側のRESTful APIを持っています私が動作しているように見えない持ってCORS設定...'Access-Control-Allow-Origin'ヘッダーがありません - asp.netコアWeb APIのターゲティング.netフレームワーク4.5.1

public void ConfigureServices(IServiceCollection services) { 

     services.AddCors(options => { 
      options.AddPolicy("AllowAll", 
        builder => { 
         builder.AllowAnyOrigin() 
           .AllowAnyMethod() 
           .AllowAnyHeader() 
           .AllowCredentials(); 
        }); 
     }); 

     // Add framework services. 
     services.AddMvc(); 
     services.AddOptions(); 
    } 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
ILoggerFactory loggerFactory) { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 

     if (env.IsDevelopment()) { 
      app.UseDeveloperExceptionPage(); 
     } 

     var options = new JwtBearerOptions { 
      Audience = "MyAudience" 
      Authority = "MyAuthority" 
     }; 

     app.UseJwtBearerAuthentication(options); 
     app.UseCors("AllowAll"); 
     app.UseMvc(); 
    } 

私は私のコントローラに以下のAPIへの呼び出しを行うたびに

[Authorize] 
[HttpGet] 
public Task<JsonResult> Get() { 

ICollection<string> abc; 
try { 
    abc = new List<string>(){"A", "B", "C"}; 
} catch (Exception) { 
    abc = null; 
} 
return Json(abc); 
} 

は、私は次のエラーを取得する...

"XMLHttpRequestは、 oad xプリフライト要求に対する応答がアクセス制御チェックをパスしない:要求されたリソースに 'Access-Control-Allow-Origin'ヘッダーが存在しない。したがって、Origin 'x'はアクセスを許可されません。応答にはHTTPステータスコード502が含まれていました。 "

クライアントからのhttp要求には「許可」ヘッダーが含まれているため、プリフライト応答がトリガーされ、有効なトークンなどがあります。

.NET Core 1.0を対象とした同じRESTful APIを実際に作成すると、期待通りに動作します。これにより、CORSに問題があり、.NET Framework 4.5.1をターゲットにしていると考えられます。または.NET Core 1.0で暗黙的に処理される追加する必要のある明示的なロジックがあります。

CORSミドルウェアはすべてこの問題を処理する必要がありますが、問題はhえ?

編集:私はこれがローカルホストとして罰金ランニングを動作することを言及するのを忘れてしまった

、私は展開した後、この問題を参照してください。また、私はこのターゲット.NET Framework 4.6.2をテストし、問題は残っていた。

+0

私は*は、この同じ問題に遭遇している可能性があります。原産地が「任意」の場合、CORSでは資格情報を指定できません。 CORSでクレデンシャルを使用するには、特定の許可された起点を特定する必要があります。私はこれがあなたの問題であるかどうかは分かりません。私はCORSで.Net 4.6.2を使用しています。 – Amy

+0

その点の詳細については、[MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)を参照してください: "認証された要求に応答する場合、サーバーは原点を指定する必要があります「*」ワイルドカードを指定するのではなく、Access-Control-Allow-Originヘッダーの値で指定します。 – Amy

+0

@Amy私はレスポンスヘッダーをチェックしていますが、CORSミドルウェアがおそらく部分的にAccess Control-Allow-Credentials:trueとAccess-Control-Allow-Originを実行していると信じています:http://何か:portnum。私はこれはローカルホスト上で実行されてうまく動作する言及を忘れていたが、展開時に私はエラーが表示されます。私はまた、.NET Framework 4.6.2をターゲットにアップグレードしようとしましたが、同じ問題があります。 – Daz

答えて

3

これは解決されました。 Visual Studio 2017の

https://github.com/aspnet/Tooling/blob/master/known-issues-vs2017.md#aspnet-core-known-issues

異なるバージョンが使用されていたし、いくつかのプロジェクトは、\の依存関係は、.NETのコア1.0をターゲットとし、他の人が別のランタイムが必要とされる原因となった。ネットコア1.1をターゲットにされました。

VS2017(15.2.26430.13)の最新バージョンである.Net Core 1.1をsync'dして、新しいランタイムをサーバーにインストールすると、問題は解決しました。

上記CORSエラーがactaully私はコールスタックに欠けていた502(不正な要求)エラーの副作用だった...

関連する問題