2016-07-21 69 views
2

我正在嘗試創建一個將被許多網站/應用程序使用的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接收「{}」。

我看了很多例子,但似乎沒有幫助。我還是很新的C#這樣的一些意見和答案的只有我上面(如ModelBinder的東西)

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

UPDATE

經過幾個小時的搜索之後,我決定從託管API的同一站點對API進行「本地」調用。 我當時能夠放置contentType:'application/json;字符集= UTF-8' ,其曾與發送解析JSON對象後進入字典參數:-(

所以現在的contentType我繼續搜索+ C#API +詞典+ CORS

回答

1

CORS已在服務器上啓用。使用簡單的綁定參數,如字符串,它很好地工作CrossDomain。字典失敗。

但是我不得不走一步對IIS

jQuery CORS Content-type OPTIONS

我測試沒有IIS內容類型標題指定,即使我添加的,以便能夠在AJAX調用指定內容類型crossDomain:true,我仍然得到Jquery錯誤抱怨CORS

1

如果一切正常,從罰款沒有問題同一個域,你將需要啓用CORS在這種情況下,你的Ajax調用將包括

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

要啓用CORS的例子來看看here