2017-11-08 9 views
0

でリモートリソースを読んで許可していません、私はMVCのWeb APIサービスは、(二つのサーバ)上でホストされていアヤックス:ブロックされたクロスオリジン・リクエスト:同一生成元ポリシーが

私はCのWebクライアントのような#とのHttpClientで、それを消費すると、それが正常に動作します私はPostmanでそれを消耗してもうまく動作しますが、ブラウザでサービスURLを貼り付けて呼び出すと、うまく動作しますが、jqueryで消費すると時々動作し、時にはうまく動作せず、次のエラーが発生します。

Cross-Origin Request Blocked:同じOrigin Policyにより、myservice.comでリモートリソースを読み取ることができません(原因:CORSプリフライトチャンネルが成功しませんでした)。 (右ルート設定後)メソッド

config.MessageHandlers.Add(new PreflightRequestsHandler()); 

アンこれはハンドラの実装です - 私たちは、このように、我々は)(WebApiConfig.RegisterにPreflightRequestHandlerを登録することを解決

The request details from Postman

+0

フィドラーをインストールして、応答メッセージを詳細に表示しましたか? –

+0

ブラウザに表示されるウェブサイトのURLは何ですか? jqueryでアクセスしようとしているURLは何ですか? – mjwills

答えて

0

using System.Net; 
using System.Net.Http; 
using System.Threading; 
using System.Threading.Tasks; 
namespace someNamespace 
{ 
    public class PreflightRequestsHandler : DelegatingHandler 
    { 
     protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
     { 
      if (request.Headers.Contains("Origin") && request.Method.Method.Equals("OPTIONS")) 
      { 
       var response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK }; 
       var tsc = new TaskCompletionSource<HttpResponseMessage>(); 
       tsc.SetResult(response); 
       return tsc.Task; 
      } 

      return base.SendAsync(request, cancellationToken); 
     } 
    } 
} 

私が思い出す限り、異なるプリフライトを処理したいかもしれませんが、この問題は解決しました。

関連する問題