it-swarm.com.de

Wie man POST DateTime-Wert an einen Web API 2-Controller

Ich habe einen Beispielcontroller:

[RoutePrefix("api/Example")]
public class ExampleController : ApiController
{
    [Route("Foo")]
    [HttpGet]
    public string Foo([FromUri] string startDate)
    {
        return "This is working";
    }

    [Route("Bar")]
    [HttpPost]
    public string Bar([FromBody] DateTime startDate)
    {
        return "This is not working";
    }
}

Wenn ich eine GET-Anfrage an: http://localhost:53456/api/Example/Foo?startDate=2016-01-01 ausstelle, funktioniert es.

Wenn ich POST an http://localhost:53456/api/Example/Bar gehe, erhalte ich einen HTTP/1.1 400 Bad Request-Fehler.

Dies sind meine POST Daten:

{
"startDate":"2016-01-01T00:00:00.0000000-00:00"
}

Was mache ich falsch?

6
Pierre Nortje

Sie können keine Nicht-Objekte direkt buchen. Sie müssen sie in einen Objektcontainer einschließen, wenn Sie FromBody verwenden.

[RoutePrefix("api/Example")]
public class ExampleController : ApiController
{
    [Route("Foo")]
    [HttpGet]
    public string Foo([FromUri] string startDate)
    {
        return "This is working";
    }

    [Route("Bar")]
    [HttpPost]
    public string Bar([FromBody] BarData data)
    {
        return "This is not working";
    }
}

public class BarData{
    public DateTime startDate {get;set;}
}

Die andere Art und Weise, wie könnte funktionieren ist, wenn Sie den Wert wie folgt mit dem =-Symbol formcodieren ( beachten Sie, dass Sie ihn als Nicht-Objekt senden, die geschweiften Klammern wurden entfernt ).

"=2016-01-01T00:00:00.0000000-00:00"
8
Igor

Versuchen Sie einfach POSTing:

{
  "2016-01-01T00:00:00.0000000-00:00"
}

Wenn Sie den Namen der Eigenschaft angeben, muss Ihr Endpunkt ein Objekt mit der Eigenschaft startDate akzeptieren. In diesem Fall möchten Sie nur eine DateTime übergeben.

4
hvaughan3

Das übermittelte Format des Datums ist wichtig und hängt von Ihrer Client-Bibliothek ab. Es muss so aussehen (Zitate in der Rohkörper-Nutzlast):

"2015-05-02T00:00:00"

Keine geschweiften Klammern, keine Eigenschaftsnamen. Das Format, das von Ihrem Code und/oder Ihrer Clientbibliothek übertragen wird, hängt davon ab, ob Sie ein Javascript-Datum senden oder eine Zeichenfolgendarstellung davon. Tweak den Einreichungscode entsprechend ...

0
Jim