J'ai un exemple de contrôleur:
[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";
}
}
Lorsque je lance une demande GET à: http://localhost:53456/api/Example/Foo?startDate=2016-01-01
cela fonctionne.
Lorsque je POST to http://localhost:53456/api/Example/Bar
je reçois une erreur HTTP/1.1 400 Bad Request
.
Voici mes POST données:
{
"startDate":"2016-01-01T00:00:00.0000000-00:00"
}
Qu'est-ce que je fais mal?
Vous ne pouvez pas publier directement des non-objets, vous devez les envelopper dans un conteneur d’objets lorsque vous utilisez FromBody
.
[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;}
}
L’autre façon que pourrait fonctionne est que si vous codez la valeur de cette manière en utilisant le symbole =
( vous l’envoyez en tant que non-objet, les accolades ont été supprimées ).
"=2016-01-01T00:00:00.0000000-00:00"
Essayez juste de poster:
{
"2016-01-01T00:00:00.0000000-00:00"
}
Spécifier le nom de la propriété signifierait que votre ordinateur d'extrémité devra accepter un objet avec une propriété nommée startDate
Dans ce cas, vous ne voulez transmettre qu'une DateTime
.
Le format de la date soumis est important et dépend de votre bibliothèque cliente. Cela doit ressembler à ceci (guillemets dans la charge brute du corps):
"2015-05-02T00:00:00"
Pas d'accolades, pas de noms de propriété. Le format transmis à partir de votre code et/ou de votre bibliothèque client dépendra de l’envoi d’une date javascript ou d’une chaîne de caractères. Alors, modifiez le code de soumission de manière appropriée ...