Отправка HTTP-запроса POST формы ( Content-Type: application/x-www-form-urlencoded
) на контроллер, представленный ниже, приводит к ответу HTTP 415 Unsupported Media Type .
public class MyController : Controller
{
[HttpPost]
public async Task<IActionResult> Submit([FromBody] MyModel model)
{
//...
}
}
Заголовки 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
Раньше он работал с ASP.NET MVC 5 в .NET 4.6.
c#
asp.net-core
asp.net-core-mvc
Барт Verkoeijen
источник
источник
Ответы:
Для форм используйте
[FromForm]
атрибут вместо[FromBody]
атрибута.Приведенный ниже контроллер работает с ASP.NET Core 1.1:
Примечание:
[FromXxx]
требуется, если ваш контроллер помечен[ApiController]
. Для контроллеров обычного представления это может быть опущено.источник
Вы можете использовать,
[FromBody]
но вам нужно установитьContent-Type
заголовок вашего запросаapplication/json
, т.е.источник
application/x-www-form-urlencoded
. Как из<form>
на странице HTML.application/json
, напримерapplication/text
? @BartVerkoeijen есть идеи?Сначала нужно указать в заголовках
Content-Type
, например, это может бытьapplication/json
.Если вы установили
application/json
тип контента, то вам нужно отправить JSON.Так что
body
в вашем запросе вы отправите неform-data
,x-www-for-urlencoded
аraw
JSON, например,{"Username": "user", "Password": "pass"}
Вы можете адаптировать пример к различным типам контента, включая то, что вы хотите отправить.
Вы можете использовать такой инструмент, как Postman или curl, чтобы поиграть с этим.
источник
В дополнение к хорошим ответам, вам не нужно использовать
[FromForm]
для получения данных формы в контроллере. Framework автоматически преобразует данные формы в модель по вашему желанию. Вы можете реализовать как следующее.источник
[FromQuery]
параметр, но я не указывал Content-Type какapplication/json
- добавив, что в моем запросе сделал эту работу также с параметром [FromQuery].Это мой случай: он запущен Среда: Контроллер AspNet Core 2.1:
Посмотреть:
источник
проблема может из-за MVC MW. Вы должны установить formatterType в параметрах MVC:
источник
«HTTP 415 Unsupported Media Type response» происходит от Content-Type в заголовке вашего запроса. например в JavaScript по Axios:
источник