2016-03-21 12 views
0

角度が非常に新しいです。今、私はWCFへの角度POSTにいくつか問題があります。パラメータCORSエラーのWCFに対する角度ポスト

これはWCFコントラクトである:

[OperationContract]  
    [WebInvoke(Method = "POST", 
    ResponseFormat = WebMessageFormat.Json, 
    RequestFormat = WebMessageFormat.Json,  
    UriTemplate = "/InsertJSONSTRING/")] 

    void InsertJSONSTRING(DyeMaster value); 

この角度コントローラ

app.controller('UploadCOJSON', function ($scope, $http) { 

    $scope.SendData = function() { 

     function DYE() { 
      this.DESCRIPTION; 
      this.COLOR_CODE; 
     } 

     $scope.dye = new DYE(); 
     $scope.dye.DESCRIPTION = $scope.DESCRIPTION; 
     $scope.dye.COLOR_CODE = $scope.COLOR_CODE;  

     var dataR = JSON.stringify($scope.dye); 

     $http({ 
      url: "http://localhost:63599/ServiceMobileListener.svc/InsertJSONSTRING",    
      method: "POST",    
      data: dataR,    
      dataType: "json",    
      contentType: "application/x-www-form-urlencoded; charset=UTF-8", 
     }); 
    } 
}); 

これは誤りである。

どういうわけ
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:63599/ServiceMobileListener.svc/InsertJSONSTRING. This can be fixed by moving the resource to the same domain or enabling CORS. 

Iは、パラメータ(データ)を除きます。何のエラーもなく動作しています。

$http({ 
      url: "http://localhost:63599/ServiceMobileListener.svc/InsertJSONSTRING",    
      method: "POST",       
      dataType: "json",    
      contentType: "application/x-www-form-urlencoded; charset=UTF-8", 
     }); 

注:ここで説明どおりにCORSを有効http://enable-cors.org/server_wcf.html

を実施してきたあなたの親切に役立ちます感謝しています。

答えて

1

あなたのネットワークタブをinspect要素で調べる必要があります。POST要求の前にOPTIONS要求をしている必要があります。 CORSヘッダーを使用してサーバー側のオプション要求に返信する必要があります。

データを送信しない場合、ブラウザはOPTIONS要求をしていてはいけません。したがって、その場合は動作しています。返信

でオプション要求については

あなたが認証

"Access-Control-Allow-Headers", "Content-Type, Authorization" 
"Access-Control-Allow-Credentials", "true" 

返信

+0

私は何を返信すればよいでしょうか?これは私がGlobal.asaxに入れたものですが、動作していないものです: { if(Request.Headers.AllKeys.Contains( "Origin")&& Request.HttpMethod = = "OPTIONS") { Response.Flush(); } } – anevil

+0

回答を @anevilに更新しました。また、http://my.requestmaking-site.comは、あなたが からリクエストしようとしているページのベースURLであることに注意してください(私はそれがlocalhostで動作するかどうかはよく分かりません。 ) – techblu3

+0

tq sir。実際にそれらのヘッダーを配置する必要がありますか?リクエスターやサービスについて?私はすでにWCFサービスのEnableCORSBehaviourに持っています。だからちょうど "Access-control-methods"ヘッダーキーを変更しましたが、運が悪い、それでも同じエラーです。 – anevil

0

の体に何かを送信するための必要はありませんできるようにしている場合は、これらのヘッダ

、必要に応じて
"Access-Control-Allow-Origin", "http://my.requestmaking-site.com" 
"Access-Control-Allow-Methods", "POST, GET, OPTIONS" 

を追加します。これらのパラメータをweb.configファイルに追加するだけです。

<httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*"/> 
     <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept"/> 
     </customHeaders> 
    </httpProtocol> 
関連する問題