tag route pages net for data aspnet asp all c# asp.net-core asp.net-core-mvc

c# - route - select asp-for asp-items



La POST del formulario de ASP.NET Core da como resultado una respuesta de tipo de medio no compatible con HTTP 415 (5)

El envío de una solicitud HTTP POST de formulario ( Content-Type: application/x-www-form-urlencoded ) al controlador a continuación da como resultado una respuesta de tipo de medio HTTP 415 no compatible .

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

Encabezados HTTP de publicación de formulario:

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

Esto solía funcionar con ASP.NET MVC 5 en .NET 4.6.


Además de buenas respuestas, no tiene que usar [FromForm] para obtener los datos del formulario en el controlador. Framework convierte automáticamente los datos del formulario al modelo que desee. Puede implementar como sigue.

[HttpPost] public async Task<IActionResult> Submit(MyModel model) { //... }


Este es mi caso: se ejecuta Entorno: Controlador AspNet Core 2.1:

public class MyController { // ... [HttpPost] public ViewResult Search([FromForm]MySearchModel searchModel) { // ... return View("Index", viewmodel); } }

Ver:

<form method="post" asp-controller="MyController" asp-action="Search"> <input name="MySearchModelProperty" id="MySearchModelProperty" /> <input type="submit" value="Search" /> </form>


Para los formularios, use el atributo [FromForm] lugar del atributo [FromBody] .

El siguiente controlador funciona con ASP.NET Core 1.1:

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


Primero debe especificar en los encabezados el tipo de Content-Type , por ejemplo, puede ser application/json .

Si configura el tipo de contenido de la application/json , debe enviar un json.

Entonces, en el body de su solicitud, no enviará form-data , no x-www-for-urlencoded sino un json raw formato, por ejemplo {"Username": "user", "Password": "pass"}

Puede adaptar el ejemplo a varios tipos de contenido, incluido lo que desea enviar.

Puedes usar una herramienta como Postman o curl para jugar con esto.


Puede usar [FromBody] pero necesita configurar el encabezado Content-Type de su solicitud en application/json , es decir

Content-Type: application/json