양식 POST HTTP 요청 ( Content-Type: application/x-www-form-urlencoded
)을 아래 제어기로 보내면 HTTP 415 지원되지 않는 매체 유형 응답이 발생합니다.
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
이것은 .NET 4.6에서 ASP.NET MVC 5와 작동하는 데 사용되었습니다.
답변
양식의 경우 [FromForm]
속성 대신 속성을 사용하십시오 [FromBody]
.
아래 컨트롤러는 ASP.NET Core 1.1에서 작동합니다.
public class MyController : Controller
{
[HttpPost]
public async Task<IActionResult> Submit([FromForm] MyModel model)
{
//...
}
}
참고 : [FromXxx]
컨트롤러에 주석이있는 경우 필수입니다 [ApiController]
. 일반 뷰 컨트롤러의 경우 생략 할 수 있습니다.
답변
당신은 사용할 수 [FromBody]
있지만 설정해야합니다 Content-Type
귀하의 요청 헤더를 application/json
, 즉,
Content-Type: application/json
답변
먼저 헤더에을 지정해야합니다 ( Content-Type
예 🙂 application/json
.
application/json
컨텐츠 유형 을 설정 하면 json을 보내야합니다.
그래서에서 body
요청의 당신은하지 보내드립니다 form-data
아니라 x-www-for-urlencoded
하지만, raw
예를 들어, JSON{"Username": "user", "Password": "pass"}
보내려는 내용을 포함하여 다양한 컨텐츠 유형에 예제를 적용 할 수 있습니다.
Postman 또는 curl과 같은 도구를 사용하여이를 사용할 수 있습니다.
답변
좋은 답변 외에도 [FromForm]
컨트롤러에서 양식 데이터를 얻는 데 사용할 필요는 없습니다 . 프레임 워크는 원하는대로 양식 데이터를 모델로 자동 변환합니다. 다음과 같이 구현할 수 있습니다.
[HttpPost]
public async Task<IActionResult> Submit(MyModel model)
{
//...
}
답변
이것은 내 경우입니다 : 실행 환경 : AspNet Core 2.1 컨트롤러 :
public class MyController
{
// ...
[HttpPost]
public ViewResult Search([FromForm]MySearchModel searchModel)
{
// ...
return View("Index", viewmodel);
}
}
전망:
<form method="post" asp-controller="MyController" asp-action="Search">
<input name="MySearchModelProperty" id="MySearchModelProperty" />
<input type="submit" value="Search" />
</form>
답변
MVC MW로 인해 문제가 발생할 수 있습니다. MVC 옵션에서 formatterType을 설정해야합니다.
services.AddMvc(options =>
{
options.UseCustomStringModelBinder();
options.AllowEmptyInputInBodyModelBinding = true;
foreach (var formatter in options.InputFormatters)
{
if (formatter.GetType() == typeof(SystemTextJsonInputFormatter))
((SystemTextJsonInputFormatter)formatter).SupportedMediaTypes.Add(
Microsoft.Net.Http.Headers.MediaTypeHeaderValue.Parse("text/plain"));
}
}).AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
});
답변
“HTTP 415 지원되지 않는 미디어 유형 응답”은 요청 헤더의 Content-Type 에서 비롯됩니다 . 예를 들어 axios의 자바 스크립트에서 :
Axios({
method: 'post',
headers: { 'Content-Type': 'application/json'},
url: '/',
data: data, // an object u want to send
}).then(function (response) {
console.log(response);
});