Mengirim formulir POST HTTP request ( Content-Type: application/x-www-form-urlencoded
) ke pengontrol di bawah ini menghasilkan respons HTTP 415 Jenis Media yang Tidak Didukung .
public class MyController : Controller
{
[HttpPost]
public async Task<IActionResult> Submit([FromBody] MyModel model)
{
//...
}
}
Bentuk pos tajuk 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
Ini digunakan untuk bekerja dengan ASP.NET MVC 5 di .NET 4.6.
c#
asp.net-core
asp.net-core-mvc
Bart Verkoeijen
sumber
sumber
Jawaban:
Untuk formulir, gunakan
[FromForm]
atribut alih-alih[FromBody]
atribut.Pengontrol di bawah ini berfungsi dengan ASP.NET Core 1.1:
Catatan:
[FromXxx]
diperlukan jika controller Anda dijelaskan dengan[ApiController]
. Untuk pengontrol tampilan normal, ini dapat dihilangkan.sumber
Anda dapat menggunakan
[FromBody]
tetapi Anda perlu mengaturContent-Type
header permintaan Andaapplication/json
, yaitusumber
application/x-www-form-urlencoded
. Suka dari<form>
pada halaman HTML.application/json
, sepertiapplication/text
? @ BartVerkoeijen ada ide?Pertama, Anda perlu menentukan di Headers
Content-Type
, misalnya, bisaapplication/json
.Jika Anda mengatur
application/json
jenis konten, maka Anda perlu mengirim json.Jadi dalam
body
permintaan Anda, Anda tidak akan mengirimform-data
,x-www-for-urlencoded
tetapiraw
json, misalnya{"Username": "user", "Password": "pass"}
Anda dapat menyesuaikan contoh dengan berbagai jenis konten, termasuk apa yang ingin Anda kirim.
Anda dapat menggunakan alat seperti tukang pos atau ikal untuk bermain dengan ini.
sumber
Sebagai tambahan jawaban yang bagus, Anda tidak harus menggunakan
[FromForm]
untuk mendapatkan data formulir di controller. Kerangka kerja secara otomatis mengonversi data formulir ke model yang Anda inginkan. Anda dapat menerapkan seperti berikut.sumber
[FromQuery]
parameter, tetapi saya tidak menentukan Tipe Konten sebagaiapplication/json
- menambahkan bahwa dalam permintaan saya, membuat ini berfungsi dengan parameter [FromQuery] juga.Ini adalah kasus saya: dijalankan Lingkungan: AspNet Core 2.1 Controller:
Melihat:
sumber
masalahnya bisa karena MVC MW. Anda harus mengatur formatterType dalam opsi MVC:
sumber
"HTTP 415 Respons Jenis Media yang Tidak Didukung" berasal dari Content-Type di header permintaan Anda. misalnya dalam javascript oleh axios:
sumber