Jika ada yang salah dalam panggilan REST WCF, seperti sumber daya yang diminta tidak ditemukan, bagaimana saya bisa bermain dengan kode respon HTTP (mengaturnya ke sesuatu seperti HTTP 404, misalnya) dalam metode OperationContract saya?
88
Jawaban:
Ada
WebOperationContext
yang dapat Anda akses dan memilikiOutgoingResponse
properti tipeOutgoingWebResponseContext
yang memilikiStatusCode
properti yang dapat diatur.sumber
WebFaultException
, bagaimanapun, tampaknya berhasil.Jika Anda perlu mengembalikan badan alasan, lihat WebFaultException
Sebagai contoh
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
sumber
WebFaultException
untuk mengembalikanHttpStatusCode.Created
?Untuk 404 ada metode bawaan di WebOperationContext.Current.OutgoingResponse yang disebut SetStatusAsNotFound (pesan string) yang akan menyetel kode status ke 404 dan deskripsi status dengan satu panggilan.
Perhatikan juga, SetStatusAsCreated (lokasi Uri) yang akan mengatur kode status ke 201 dan header lokasi dengan satu panggilan.
sumber
Jika Anda ingin melihat deskripsi status di header, metode REST harus memastikan untuk mengembalikan null dari bagian Catch () seperti di bawah ini:
catch (ArgumentException ex) { WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError; WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message; return null; }
sumber
Anda juga dapat mengembalikan statusCode dan alasan tubuh dengan WebOperationContext 's StatusCode dan StatusDescription :
WebOperationContext context = WebOperationContext.Current; context.OutgoingResponse.StatusCode = HttpStatusCode.OK; context.OutgoingResponse.StatusDescription = "Your Message";
sumber
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized; throw new WebException("令牌码不正确", new InvalidTokenException());
ref: https://social.msdn.microsoft.com/Forums/en-US/f6671de3-34ce-4b70-9a77-39ecf5d1b9c3/weboperationcontext-http-statuses-and-exceptions?forum=wcf
sumber
Ini tidak berhasil untuk saya untuk Layanan Data WCF. Sebagai gantinya, Anda dapat menggunakan DataServiceException dalam kasus Layanan Data. Menemukan posting berikut berguna. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de
sumber