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?
Accept
tajuk keapplication/json
. Anda juga perlu menyetelContent-Type
tajuk keapplication/json
.Jawaban:
Dalam permintaan HTTP Anda perlu menyetel Jenis Konten ke:
Content-Type: application/json
Jadi jika Anda menggunakan klien fiddler, tambahkan
Content-Type: application/json
ke header permintaansumber
Content-Type:application/json
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); }
Setiap data masukan JSON harus berupa data mentah .
sumber
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.
sumber
Silakan periksa apakah Anda melewati metode sebagai
POST
gantinyaGET
. jika demikian Anda akan mendapatkan kesalahan yang sama seperti yang Anda posting di atas.$http({ method: 'GET',
sumber
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)
sumber
Itu perlu disertakan
Content-Type:application/json
dalam bagian header permintaan api web ketika tidak menyebutkan konten apa pun maka secara default ituContent-Type:text/plain
diteruskan ke permintaan.Cara terbaik untuk menguji api di alat tukang pos.
sumber