2017-06-14 52 views
28

Wysłanie formularza żądania HTTP żądania formularza (Content-Type: application/x-www-form-urlencoded) do poniższego kontrolera powoduje utworzenie odpowiedzi HTTP 415 Nieobsługiwany nośnik typu.ASP.NET Rdzeń formularz POST powoduje odpowiedź typu nośnika HTTP 415 Nieobsługiwany typ nośnika

public class MyController : Controller 
{ 
    [HttpPost] 
    public async Task<IActionResult> Submit([FromBody] MyModel model) 
    { 
     //... 
    } 
} 

Formularz nagłówki HTTP POST:

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 

To używane do pracy z ASP.NET MVC 5 na .NET 4.6.

Odpowiedz

48

Dla formularzy należy używać atrybutu [FromForm] zamiast atrybutu [FromBody].

Poniższy sterownik działa z ASP.NET 1.1 Rdzeń:

public class MyController : Controller 
{ 
    [HttpPost] 
    public async Task<IActionResult> Submit([FromForm] MyModel model) 
    { 
     //... 
    } 
} 
9

Można użyć [FromBody], ale trzeba ustawić Content-Type nagłówek żądania na application/json

jak

Content-Type: application/json 
+0

Dlatego pytanie konkretnie wymienia formą * * POST z treścią typu ' application/x-www-form-urlencoded'. Podobnie jak z '

' na stronie HTML. –

Powiązane problemy