Das Senden einer POST-HTTP-Formularanforderung ( Content-Type: application/x-www-form-urlencoded
) an den folgenden Controller führt zu einer nicht unterstützten HTTP 415-Medientypantwort .
public class MyController : Controller
{
[HttpPost]
public async Task<IActionResult> Submit([FromBody] MyModel model)
{
//...
}
}
Formular nach HTTP-Headern:
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
Dies funktionierte früher mit ASP.NET MVC 5 unter .NET 4.6.
c#
asp.net-core
asp.net-core-mvc
Bart Verkoeijen
quelle
quelle
Antworten:
Verwenden Sie für Formulare das
[FromForm]
Attribut anstelle des[FromBody]
Attributs.Der folgende Controller funktioniert mit ASP.NET Core 1.1:
Hinweis:
[FromXxx]
ist erforderlich, wenn Ihr Controller mit Anmerkungen versehen ist[ApiController]
. Bei normalen Ansichtssteuerungen kann dies weggelassen werden.quelle
Sie können verwenden,
[FromBody]
aber Sie müssen denContent-Type
Header Ihrer Anfrage auf setzenapplication/json
, dhquelle
application/x-www-form-urlencoded
. Wie von einer<form>
auf einer HTML-Seite.application/json
, wieapplication/text
? @ BartVerkoeijen irgendwelche Ideen?Zuerst müssen Sie in den Headern angeben
Content-Type
, wie es beispielsweise sein kannapplication/json
.Wenn Sie den
application/json
Inhaltstyp festlegen , müssen Sie einen JSON senden.So
body
senden Sie in Ihrer Anfrage nichtform-data
,x-www-for-urlencoded
sondernraw
zum Beispiel einen json{"Username": "user", "Password": "pass"}
Sie können das Beispiel an verschiedene Inhaltstypen anpassen, einschließlich der zu sendenden Inhalte.
Sie können ein Werkzeug wie Postman oder Curl verwenden, um damit zu spielen.
quelle
Als Ergänzung zu guten Antworten müssen Sie keine
[FromForm]
Formulardaten im Controller abrufen. Framework konvertiert Formulardaten automatisch in ein Modell, wie Sie es wünschen. Sie können wie folgt implementieren.quelle
[FromQuery]
Parameter, aber ich habe den Inhaltstyp nicht als angegebenapplication/json
- das Hinzufügen in meiner Anfrage hat dazu geführt, dass dies auch mit dem Parameter [FromQuery] funktioniert.Dies ist mein Fall: Es wird ausgeführt. Umgebung: AspNet Core 2.1 Controller:
Aussicht:
quelle
Das Problem kann aufgrund von MVC MW auftreten. Sie müssen formatterType in den MVC-Optionen festlegen:
quelle
"HTTP 415-Antwort für nicht unterstützte Medientypen" stammt von Content-Type im Header Ihrer Anfrage. Zum Beispiel in Javascript von Axios:
quelle