2016-07-21 22 views
2

多くのWebサイト/アプリケーションで使用されるWeb APIを作成しようとしています。C#Web Api(非MVC)辞書パラメータ

Apiは動的であるため、辞書としてパラメータを取ります。

C#方法:メソッドに

[HttpPost] 
public Dictionary<string, string> ApiTest(Dictionary<string, string> parameters) 
{ 
    Dictionary<string, string> dic_data = new Dictionary<string, string>(); 
    foreach (KeyValuePair<string, string> tmp in parameters) 
     { 
      dic_data[tmp.Key] = tmp.Value; 
     } 

    return dic_data; 
} 

Ajaxのコール:

私はcontentTypeのを左に注意してください: "アプリケーション/ jsonの" それはCORSを含むことについて不平を言うよう

を許可
var data = {"parameters":{"product_id":"1","product_model":"HFJ5G1.5","product_type":"plat","product_return":"graviteits"}}; 
//var data = {AlbumName: "Dirty Deeds",Songs:[ { SongName: "Problem Child"},{ SongName: "Squealer"}]}; 
var parameters = {}; 
parameters['1'] = 10; 
parameters['2'] = 11; 
$.ajax({ 
    type :'POST', 
    url : 'http://localhost:8082/api/WebController/ApiTest/', 
    dataType : 'json', 
    data: parameters , 

    success : function(data) { 
    console.log(data); 

私もこのパラメータをバインドしてみました:

public class myParameters 
{ 
    public Dictionary<string,string> parameters { get; set; } 
} 
public Dictionary<string, string> ApiTest(myParameters parameters) 

まだ運がありません。

ブラウザコンソールでは、APIから「{}」を返信し続けるだけです。

多くの例を見てきましたが、どれも役に立たないようです。 I(ModelBinderのもののような)ので、コメントと回答の一部は私を超えていた、まだC#に非常に新しいです

Passing List of KeyValuePair or IDictionary to Web Api Controller from Javascript

Method with Dictionary Parameter in Asp.Net Web API

WebApi bind body to Json dictionary

Deserialize JSON into dictionary in Web Api controller

更新

数時間の検索の後、私はAPIをホストする同じサイトからAPIへの「ローカル」呼び出しを行うことにしました。 その後、私はcontentType: 'application/json;という場所に置くことができました。文字セット= UTF-8' 、だから今、それはより正常に動作している場合、私の検索が+ C#アピ+辞書+ CORS

答えて

1

CORSがサーバーで有効になっています。文字列のような単純なバインディングパラメータを使用すると、Crossdomainがうまく機能しました。辞書が失敗した場所。私はAJAX呼び出し

jQuery CORS Content-type OPTIONS

にコンテンツタイプを指定可能にするためにIIS上でさらに一歩行かなければならなかったしかし

は私が指定したIISコンテンツタイプヘッダーなしでそれをテストしている、と私は追加しても、 crossDomain:true、CORSに関するJqueryのエラーメッセージが表示される

1

のcontentTypeを続け

:-(辞書パラメータに解析するJSONポストオブジェクトを送信して問題はなかったました同じドメインでは、あなたはそのような場合にはCORSを有効にする必要があります、そして、あなたのAJAX呼び出しは、CORSの例を見てみ有効にするには

crossDomain: true, dataType: "json", contentType: "application/json",

が含まれますhere

関連する問題