Terjadi kesalahan saat mengirim json dalam POST ke layanan API web


90

Saya membuat layanan web menggunakan API Web. Saya menerapkan kelas sederhana

public class ActivityResult
{
    public String code;
    public int indexValue;
    public int primaryCodeReference;
}

Dan kemudian saya telah menerapkan di dalam pengontrol saya

[HttpPost]
public HttpResponseMessage Post(ActivityResult ar)
{
    return new HttpResponseMessage(HttpStatusCode.OK);
}

Tetapi ketika saya memanggil API yang meneruskan POST file json:

{"code":"XXX-542","indexValue":"3","primaryCodeReference":"7"}

Saya mendapatkan pesan kesalahan berikut:

{
    "Message": "The request entity's media type 'text/plain' is not supported for this resource.",
    "ExceptionMessage": "No MediaTypeFormatter is available to read an object of type 'ActivityResult' from content with media type 'text/plain'.",
    "ExceptionType": "System.Net.Http.UnsupportedMediaTypeException",
    "StackTrace": "   in System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   in System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   in System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"
}

Apa yang saya lakukan salah?


9
Anda harus menambahkan header "application / json" agar payload dapat diterima dari klien.
Adam Zuckerman

Saya telah menyetel header dengan benar dalam permintaan HTTP saya. Namun masalahnya tampaknya ada di sisi server: dropbox.com/s/xlidnnybs8v6d0u/Cattura.JPG
GVillani82

4
Sepertinya Anda hanya menyetel Accepttajuk ke application/json. Anda juga perlu menyetel Content-Typetajuk ke application/json.
Brian Rogers

Jawaban:


186

Dalam permintaan HTTP Anda perlu menyetel Jenis Konten ke: Content-Type: application/json

Jadi jika Anda menggunakan klien fiddler, tambahkan Content-Type: application/jsonke header permintaan


2
  1. Anda harus menambahkan properti header Content-Type:application/json
  2. Saat Anda menentukan parameter input metode permintaan POST yang harus diberi anotasi [FromBody], misalnya :

    [HttpPost]
    public HttpResponseMessage Post([FromBody]ActivityResult ar)
    {
      return new HttpResponseMessage(HttpStatusCode.OK);
    }
    
  3. Setiap data masukan JSON harus berupa data mentah .


1

tip lain ... di mana menambahkan "content-type: application / json" ... ke kolom textbox pada tab Composer / Parsed. Ada 3 baris yang sudah terisi di sana, jadi saya menambahkan Jenis konten ini sebagai baris ke-4. Itu membuat Post bekerja.


0

Silakan periksa apakah Anda melewati metode sebagai POSTgantinya GET. jika demikian Anda akan mendapatkan kesalahan yang sama seperti yang Anda posting di atas.

$http({               
 method: 'GET',

Jenis media 'teks / polos' entitas permintaan tidak didukung untuk sumber daya ini.


1
Pertanyaannya secara khusus tentang http POST, dia tidak meminta data dari server yang dia kirim datanya ke server.
Perang

0

Saya memiliki semua pengaturan saya tercakup dalam jawaban yang diterima. Masalah yang saya alami adalah saya mencoba memperbarui jenis entitas Entity Framework "Tugas" seperti:

public IHttpActionResult Post(Task task)

Apa yang berhasil bagi saya adalah membuat entitas saya sendiri "DTOTask" seperti:

public IHttpActionResult Post(DTOTask task)

0

Itu perlu disertakan Content-Type:application/jsondalam bagian header permintaan api web ketika tidak menyebutkan konten apa pun maka secara default itu Content-Type:text/plainditeruskan ke permintaan.

Cara terbaik untuk menguji api di alat tukang pos.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.