Envoi d’un formulaire de requête HTTP POST ( Content-Type: application/x-www-form-urlencoded
) aux résultats du contrôleur ci-dessous dans une réponse HTTP 415 Unsupported Media Type .
public class MyController : Controller { [HttpPost] public async Task Submit([FromBody] MyModel model) { //... } }
Formulaire après les en-têtes HTTP:
POST /submit HTTP/1.1 Host: example.com:1337 Connection: keep-alive Content-Length: 219 Pragma: no-cache Cache-Control: no-cache Origin: https://example.com:1337 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Content-Type: application/x-www-form-urlencoded Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Referer: https://example.com:1337/submit Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.8,nl;q=0.6
Cela fonctionnait avec ASP.NET MVC 5 sur .NET 4.6.
Pour les formulaires, utilisez l’atsortingbut [FromForm]
au lieu de l’atsortingbut [FromBody]
.
Le contrôleur ci-dessous fonctionne avec ASP.NET Core 1.1:
public class MyController : Controller { [HttpPost] public async Task Submit([FromForm] MyModel model) { //... } }
Vous pouvez utiliser [FromBody] mais vous devez définir l’en – tête Content-Type de votre requête sur application / json.
comme
Content-Type: application/json
En plus de bonnes réponses, vous n’avez pas à utiliser [FromForm]
pour obtenir des données de formulaire dans le contrôleur. Le framework convertit automatiquement les données du formulaire en modèle comme vous le souhaitez. Vous pouvez implémenter comme suit.
[HttpPost] public async Task Submit(MyModel model) { //... }
Tout d’abord, vous devez spécifier dans les en-têtes le type de Content-Type
, par exemple, il peut être application/json
.
Si vous définissez le type de contenu application/json
, vous devez envoyer un fichier json.
Donc, dans le body
de votre requête, vous enverrez pas form-data
, pas x-www-for-urlencoded
mais un fichier json raw
, par exemple {"Username": "user", "Password": "pass"}
Vous pouvez adapter l’exemple à différents types de contenu, y compris ce que vous souhaitez envoyer.
Vous pouvez utiliser un outil comme Postman ou Curl pour jouer avec cela.