Beberapa bulan yang lalu, Microsoft memutuskan untuk mengubah kelas HttpResponseMessage. Sebelumnya, Anda bisa meneruskan tipe data ke konstruktor, dan kemudian mengembalikan pesan dengan data itu, tetapi tidak lagi.
Sekarang, Anda perlu menggunakan properti Konten untuk mengatur konten pesan. Masalahnya adalah bahwa itu adalah tipe HttpContent, dan sepertinya saya tidak dapat menemukan cara untuk mengkonversi string, misalnya, ke HttpContent.
Adakah yang tahu bagaimana menangani masalah ini? Terima kasih banyak.
c#
asp.net-mvc
asp.net-web-api
praetor
sumber
sumber
Anda harus membuat respons menggunakan Request.CreateResponse :
Anda dapat mengirimkan objek bukan hanya string ke CreateResponse dan itu akan membuat cerita bersambung berdasarkan pada header Terima permintaan. Ini menyelamatkan Anda dari memilih formatter secara manual.
sumber
CreateErrorResponse()
jika responsnya adalah kesalahan, seperti dalam contoh jawaban ini. Di dalam try-catch saya, saya menggunakan:this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "message", exception);
Dan, ini adalah jawaban yang benar jika Anda sama sekali khawatir tentang menghormati header Terima penelepon, tanpa shenanigans tambahan (dan Anda menggunakan WebAPI)ApiController
. Jika Anda hanya mewarisiController
, itu tidak bekerja, dan Anda harus membuatnya sendiri:HttpResponseMessage msg = new HttpResponseMessage(); msg.Content = new StringContent("hi"); msg.StatusCode = HttpStatusCode.OK;
Tampaknya cara baru untuk melakukannya dirinci di sini:
http://aspnetwebstack.codeplex.com/discussions/350492
Mengutip Henrik,
Jadi pada dasarnya, kita harus membuat tipe ObjectContent, yang tampaknya dapat dikembalikan sebagai objek HttpContent.
sumber
new JsonMediaTypeFormatter();
atau serupa tergantung pada format AndaObjectContent
tidak ditemukan, menggunakan WCFSolusi single-line termudah adalah menggunakan
Untuk konten JSON bersambung:
sumber
Untuk objek T apa pun yang dapat Anda lakukan:
sumber
Request
hanya tersedia denganCreateResponse
metode jika Anda mewarisiApiController
. Ini tidak akan berfungsi jika menggunakanController
.Anda dapat membuat jenis konten khusus Anda sendiri. Misalnya satu untuk konten Json dan satu untuk konten Xml (kemudian cukup tetapkan ke HttpResponseMessage.Content):
sumber
Terinspirasi oleh jawaban Simon Mattes, saya harus memuaskan IHttpActionResult yang diperlukan untuk mengembalikan tipe ResponseMessageResult. Juga menggunakan JsonContent nashawn, saya berakhir dengan ...
Lihat jawaban nashawn untuk JsonContent.
sumber
Tidak diragukan lagi, Anda benar, Florin. Saya sedang mengerjakan proyek ini, dan menemukan bahwa ini sepotong kode:
Bisa diganti dengan:
sumber