2016-07-21 7 views
2

Ich versuche, eine Web-API zu erstellen, die von vielen Websites/Apps verwendet wird.C# Web Api (Nicht MVC) Wörterbuch Parameter

Die Api nimmt Wörterbuch als Parameter als dynamisch.

C# Methode:

[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 Aufruf zur Methode:

Bitte beachten i content gelassen: "application/json", wie es beschwert sich darüber mit CORS ua als erlaubt

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); 

Ich habe versucht Binding den Parameter auch:

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

Immer noch kein Glück.

In der Browser-Konsole bekomme ich immer wieder "{}" von der API zurück.

Ich habe viele Beispiele angeschaut, aber keine scheint zu helfen. Ich bin immer noch sehr neu in C# so dass einige der Kommentare und Antworten waren über mir nur (wie die Modelbinder Sachen)

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:

Nach ein paar weiteren Stunden der Suche habe ich beschlossen, einen "lokalen" Aufruf an die API von derselben Site aus vorzunehmen, die die API hostet. Ich konnte dann contentType einfügen: 'application/json; charset = utf-8' , das :-(

mit dem Senden Parsen JSON Post Objekt in Dictionary Parameter keine Probleme hatte

So, jetzt von content meiner Suche CORS + C# Api + Wörterbuch + von

Antwort

1

CORS umfassen wurde auf dem Server aktiviert. Mit einfachen Bindungsparametern wie Strings funktionierte es gut Crossdomain. Wörterbuch wo ist fehlgeschlagen.

Allerdings hatte ich noch einen Schritt weiter auf IIS zu gehen, um den Inhaltstyp in dem AJAX-Aufruf zu ermöglichen Angabe

jQuery CORS Content-type OPTIONS

ich es ohne IIS Inhaltstyp-Header getestet habe angegeben, und auch wenn ich hinzufügen crossDomain: Wahr, ich bekomme immer noch Jquery Fehler, der sich über CORS

beschwert
1

Wenn es funktioniert gut weiter wird die gleiche Domain, müssen Sie CORS in diesem Fall und Ihre ajax-Aufruf

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

ermöglichen, um CORS einen Blick auf die here Beispiel zu ermöglichen