Wysłanie formularza POST HTTP request ( Content-Type: application/x-www-form-urlencoded
) do poniższego kontrolera skutkuje odpowiedzią HTTP 415 Unsupported Media Type .
public class MyController : Controller
{
[HttpPost]
public async Task<IActionResult> Submit([FromBody] MyModel model)
{
//...
}
}
Nagłówki HTTP postu w formularzu:
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
Służyło to do pracy z ASP.NET MVC 5 na platformie .NET 4.6.
c#
asp.net-core
asp.net-core-mvc
Bart Verkoeijen
źródło
źródło
Odpowiedzi:
W przypadku formularzy użyj
[FromForm]
atrybutu zamiast[FromBody]
atrybutu.Poniższy kontroler współpracuje z ASP.NET Core 1.1:
Uwaga:
[FromXxx]
jest wymagana, jeśli kontroler jest oznaczony[ApiController]
. W przypadku normalnych kontrolerów widoku można go pominąć.źródło
Możesz użyć,
[FromBody]
ale musisz ustawićContent-Type
nagłówek swojego żądania naapplication/json
, tjźródło
application/x-www-form-urlencoded
. Jak ze<form>
strony HTML.application/json
np.application/text
? @BartVerkoeijen jakieś pomysły?Najpierw musisz określić w nagłówkach
Content-Type
, na przykład może to byćapplication/json
.Jeśli ustawisz
application/json
typ zawartości, musisz wysłać plik json.Tak więc w
body
swoim żądaniu nie wyślesz na przykładform-data
niex-www-for-urlencoded
tylko plikuraw
json{"Username": "user", "Password": "pass"}
Możesz dostosować przykład do różnych typów treści, w tym do tego, co chcesz wysłać.
Możesz użyć narzędzia takiego jak Postman lub curl, aby się tym bawić.
źródło
Oprócz dobrych odpowiedzi nie musisz używać
[FromForm]
formularza do pobierania danych w kontrolerze. Framework automatycznie konwertuje dane formularza na model, jak chcesz. Możesz wdrożyć jak następujące.źródło
[FromQuery]
parametr, ale nie określałem Content-Type asapplication/json
- dodając go w moim żądaniu, sprawiłem, że działało to również z parametrem [FromQuery].To jest mój przypadek: działa Środowisko: Kontroler AspNet Core 2.1:
Widok:
źródło
problem może być spowodowany MVC MW. musisz ustawić formatterType w opcjach MVC:
źródło
Odpowiedź „Nieobsługiwany typ multimediów HTTP 415” wynika z Content-Type w nagłówku żądania. na przykład w javascript przez axios:
źródło