2016-05-16 17 views
0

Im mit Winkel und möchte eine ID int übergeben und eine Zeichenfolge von Client zu Web-API-Controller. Der einzige Weg, wie ich es zum Laufen bringen kann, besteht darin, eine Klasse als Parameter in der Empfangsmethode zu haben, die Eigenschaften hat, die den geposteten Daten zugeordnet werden können. Es scheint verrückt ineffizient zu sein, eine neue Klasse zu erstellen, um nur zwei Parameter zu erhalten, um beispielsweise ein Objekt zu aktualisieren, indem ein Objekt in eine Sammlung eingefügt wird, die es besitzt. Wenn ich also versuche, eine neue Zeichenfolge zu senden, sollte die Sammlung ad und eine ID des Objekts, das die Sammlung besitzt, sein.Post mehrere Parameter WebApi Controller

Web Api-Controller

[Route("addEquipment")] 
[HttpPost] 
public void AddEquipment(AddNinjaEquipmentPost newEquipment) 
{ 

    //This works 
} 

public struct AddNinjaEquipmentPost 
{ 
    public int Id { get; set; } 
    public string NewEquipment { get; set; } 
} 

Aber ich möchte so etwas wie

[Route("addEquipment")] 
[HttpPost] 
public void AddEquipment(FormDataCollection data) 
{ 

    //id = data["id"] 
    //newEquipment = data["newEquipment "] 
} 

OR etwas haben, wie

[Route("addEquipment")] 
[HttpPost] 
public void AddEquipment(int id, string newEquipment) 
{ 

} 
+0

Was ist mit dem Senden eines 'JObject' als Eingabeparameter für eine' POST' Methode? – meorfi

+0

Es sollte in allen Szenarien funktionieren. Wie posten Sie diese Methoden? Können Sie Ihre Antwort mit eckigen Postings aktualisieren? Überprüfen Sie auch die Entwicklerkonsole auf Fehler. – Zaki

+0

Wenn Sie 'webApi2' verwenden, kann Ihnen das helfen: http://weblog.west-wind.com/posts/2012/Sep/11/Passing-multiple-simple-POST-Values-to-ASPNET-Web-API Sieh dir das auch an: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api – meorfi

Antwort

0

Leider API Web diese Anforderung aus nicht verarbeiten kann die Kiste. Aber gibt es eine Abhilfe durch einen benutzerdefinierten Parameter zu schaffen Bindung: custom parameter binder

Für mein vorheriges Szenario:
Ich schickte eine JObject-webApi Methode anstelle einen benutzerdefinierten Binder zu schaffen.

Von meinem Beispiel:

public OperationResult PerformOperation(JObject details) 
{   
    dynamic d = details; 

    int employeeId; 
    DateTime start; 
    DateTime end; 
    try 
    { 
     employeeId = (int)d.employeeId.Value; 
     start = (DateTime)d.start.Value; 
     end = (DateTime)d.end.Value); 
    } 
    catch (RuntimeBinderException exception) { } 
} 

Ich würde auch interessieren meinen Code zu verbessern, wenn eine andere bessere Antwort wird zur Verfügung gestellt werden :)

0

Für ...

[Route("addEquipment")] 
[HttpPost] 
public void AddEquipment(int id, string newEquipment) 
{ 

} 

Sie können Veröffentlichen Sie den Wert in der Abfragezeichenfolge.

POST http://localhost:1234/api/Equipment/addEquipment?id=1&newEquipment=Weights 

Es gibt auch ein paar andere Möglichkeiten, dies zu tun, wenn Sie die Werte in den Körper des Antrags und nicht in der Abfrage-String soll.