Nếu xảy ra sự cố trong lệnh gọi WCF REST, chẳng hạn như không tìm thấy tài nguyên được yêu cầu, thì làm cách nào để tôi có thể xử lý với mã phản hồi HTTP (ví dụ: đặt nó thành một thứ gì đó như HTTP 404) trong phương thức OperationContract của tôi?
Nếu xảy ra sự cố trong lệnh gọi WCF REST, chẳng hạn như không tìm thấy tài nguyên được yêu cầu, thì làm cách nào để tôi có thể xử lý với mã phản hồi HTTP (ví dụ: đặt nó thành một thứ gì đó như HTTP 404) trong phương thức OperationContract của tôi?
Câu trả lời:
Có một thuộc tính WebOperationContext
mà bạn có thể truy cập và nó có một OutgoingResponse
thuộc tính loại OutgoingWebResponseContext
có một thuộc StatusCode
tính có thể được thiết lập.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
Tuy nhiên, ném a có vẻ hiệu quả.
Nếu bạn cần trả về một lý do thì hãy xem WebFaultException
Ví dụ
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
WebFaultException
để trả về một HttpStatusCode.Created
không?
Đối với 404, có một phương thức tích hợp trên WebOperationContext.Current.OutgoingResponse được gọi là SetStatusAsNotFound (thông báo chuỗi) sẽ đặt mã trạng thái thành 404 và mô tả trạng thái bằng một lệnh gọi.
Cũng lưu ý rằng, SetStatusAsCreate (Vị trí Uri) sẽ đặt mã trạng thái thành 201 và tiêu đề vị trí bằng một lệnh gọi.
Nếu bạn muốn xem mô tả trạng thái trong tiêu đề, phương thức REST phải đảm bảo trả về null từ phần Catch () như bên dưới:
catch (ArgumentException ex)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
return null;
}
Bạn cũng có thể trả về một cơ thể statusCode và lý trí với WebOperationContext 's StatusCode và StatusDescription :
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());
Điều này không hoạt động đối với tôi đối với Dịch vụ Dữ liệu WCF. Thay vào đó, bạn có thể sử dụng DataServiceException trong trường hợp Dịch vụ dữ liệu. Thấy bài viết sau hữu ích. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de