Untuk kembali dari pengontrol Web API 2, saya dapat mengembalikan konten dengan respons jika responsnya OK (status 200) seperti ini:
public IHttpActionResult Get()
{
string myResult = ...
return Ok(myResult);
}
Jika memungkinkan, saya ingin menggunakan tipe hasil bawaan di sini jika memungkinkan: https://msdn.microsoft.com/en-us/library/system.web.http.results(v=vs.118).aspx
Pertanyaan saya adalah, untuk jenis respons lain (bukan 200), bagaimana saya bisa mengembalikan pesan (string) dengannya? Sebagai contoh, saya bisa melakukan ini:
public IHttpActionResult Get()
{
return InternalServerError();
}
tapi bukan ini:
public IHttpActionResult Get()
{
return InternalServerError("Message describing the error here");
}
Idealnya saya ingin ini digeneralisasi sehingga saya dapat mengirim pesan kembali dengan salah satu implementasi dari IHttpActionResult.
Apakah saya perlu melakukan ini (dan membuat pesan respons sendiri):
public IHttpActionResult Get()
{
HttpResponseMessage responseMessage = ...
return ResponseMessage(responseMessage);
}
atau adakah cara yang lebih baik?
c#
asp.net-web-api
httpresponse
mayabelle
sumber
sumber
ApiController.InternalServerError
msdn.microsoft.com/en-us/library/dn292630(v=vs.118).aspxJawaban:
Anda bisa menggunakan ini:
sumber
code
(di mana kode adalah string) direturn Content(HttpStatusCode.OK, code)
enkapsulasi dalam "yang tidak terduga, apakah ada alasan untuk ini? Misalnya nilai yang dikembalikan adalah"\"value\""
saya menggunakan mvc5Anda dapat menggunakan HttpRequestMessagesExtensions.CreateErrorResponse (
System.Net.Http
namespace), seperti:Lebih disukai membuat tanggapan berdasarkan permintaan untuk memanfaatkan negosiasi konten API Web.
sumber
ApiController.Request
nol, berarti Anda tidak berada dalam konteks yang benar, atau ada sesuatu yang rusak dalam arsitektur WebAPI Anda.Saya akhirnya pergi dengan solusi berikut:
... yang bisa digunakan seperti ini:
Saya terbuka untuk saran untuk perbaikan. :)
sumber
Anda juga dapat melakukan:
sumber
Siapa pun yang tertarik mengembalikan apa pun dengan kode status apa pun dengan mengembalikan ResponseMessage:
sumber
Di ASP.NET Web API 2, Anda bisa membungkusnya
ResponseMessage
dengan ResponseMessageResult :Dalam beberapa kasus ini mungkin cara paling sederhana untuk mendapatkan hasil yang diinginkan, meskipun umumnya lebih baik menggunakan berbagai hasil di System.Web.Http.Hasil .
sumber
Sederhana:
return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Your message"));
Ingatlah untuk merujuk System.Net.Http dan System.Net .
sumber
Saya akan merekomendasikan membaca posting ini. Ada banyak cara untuk menggunakan HttpResponse yang ada seperti yang disarankan, tetapi jika Anda ingin memanfaatkan Web Api 2, maka coba gunakan beberapa opsi IHttpActionResult bawaan seperti
atau
Pilih jenis pengembalian yang tepat untuk Pengontrol Web Api
sumber
Contoh yang lebih rinci dengan dukungan kode HTTP yang tidak didefinisikan dalam C #
HttpStatusCode
.Content
adalah metode virtual yang didefinisikan dalam kelas abstrakApiController
, basis controller. Lihat deklarasi seperti di bawah ini:sumber
@abelabelle Anda dapat membuat beton IHttpActionResult dan membungkus kode-kode seperti ini:
sumber
Saya memiliki masalah yang sama. Saya ingin membuat hasil khusus untuk pengontrol api saya, untuk memanggil mereka suka
return Ok("some text");
Lalu saya melakukan ini: 1) Buat jenis hasil khusus dengan singletone
2) Buat pengontrol khusus dengan metode baru:
Dan kemudian saya dapat memanggil mereka di pengontrol saya, seperti ini:
sumber
jawaban ini didasarkan pada jawaban Shamil Yakupov, dengan objek nyata bukan string.
sumber
Sebagai pengecualian, saya biasanya melakukannya
sumber
Hal-hal di atas sangat membantu.
Saat membuat layanan web, Jika Anda mengambil kasus layanan konsumen akan sangat dihargai. Saya berusaha menjaga keseragaman output. Anda juga dapat memberikan komentar atau pesan kesalahan aktual. Konsumen layanan web hanya dapat memeriksa apakah IsSuccess benar atau tidak, yang lain akan yakin ada masalah, dan bertindak sesuai situasi.
Anda dipersilakan untuk memberikan saran jika ada :)
sumber
Maaf untuk jawaban yang terlambat kenapa tidak Anda gunakan sederhana
return BadRequest("your message");
Saya menggunakannya untuk semua milik saya
IHttpActionResult
kesalahan ini berfungsi dengan baikdi sini adalah dokumentasi: https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.badrequest(v=vs.118).aspx
sumber
400
jawaban tidak pantas. OP secara khusus memberi500
tanggapan sebagai contoh.