L'envoi d'une requête POST HTTP ( Content-Type: application/x-www-form-urlencoded
) de formulaire au contrôleur ci-dessous entraîne une réponse HTTP 415 Type de support non pris en charge .
public class MyController : Controller
{
[HttpPost]
public async Task<IActionResult> Submit([FromBody] MyModel model)
{
//...
}
}
Formulaire d'en-têtes HTTP de publication:
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.
c#
asp.net-core
asp.net-core-mvc
Bart Verkoeijen
la source
la source
Réponses:
Pour les formulaires, utilisez l'
[FromForm]
attribut au lieu de l'[FromBody]
attribut.Le contrôleur ci-dessous fonctionne avec ASP.NET Core 1.1:
Remarque:
[FromXxx]
est obligatoire si votre contrôleur est annoté avec[ApiController]
. Pour les contrôleurs de vue normaux, il peut être omis.la source
Vous pouvez utiliser
[FromBody]
mais vous devez définir l'en-Content-Type
tête de votre demande surapplication/json
, c'est- à -direla source
application/x-www-form-urlencoded
. Comme à partir d'un<form>
sur une page HTML.application/json
, commeapplication/text
? @BartVerkoeijen des idées?Vous devez d'abord spécifier dans les en-têtes
Content-Type
, par exemple, cela peut êtreapplication/json
.Si vous définissez le
application/json
type de contenu, vous devez envoyer un fichier json.Donc dans le
body
de votre demande vous n'enverrez pasform-data
, pasx-www-for-urlencoded
mais unraw
json, 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.
la source
En plus de bonnes réponses, vous n'avez pas à utiliser
[FromForm]
pour obtenir des données de formulaire dans le contrôleur. Framework convertit automatiquement les données de formulaire en modèle comme vous le souhaitez. Vous pouvez implémenter comme suit.la source
[FromQuery]
paramètre, mais je ne spécifiais pas le Content-Type commeapplication/json
- en ajoutant cela dans ma demande, cela fonctionnait également avec le paramètre [FromQuery].C'est mon cas: il est exécuté Environnement: AspNet Core 2.1 Controller:
Vue:
la source
le problème peut être dû à MVC MW.vous devez définir formatterType dans les options MVC:
la source
"Réponse HTTP 415 Type de média non pris en charge" provient de Content-Type dans l'en-tête de votre requête. par exemple en javascript par axios:
la source