Якщо щось виходить не так у виклику WCF REST, наприклад, запитаний ресурс не знайдений, як я можу грати з кодом відповіді HTTP (наприклад, встановивши його на щось на зразок HTTP 404) у своєму методі OperationContract?
Якщо щось виходить не так у виклику WCF REST, наприклад, запитаний ресурс не знайдений, як я можу грати з кодом відповіді HTTP (наприклад, встановивши його на щось на зразок HTTP 404) у своєму методі OperationContract?
Відповіді:
Існує , WebOperationContext
що ви можете отримати доступ і вона має OutgoingResponse
властивість типу , OutgoingWebResponseContext
який має StatusCode
властивість , яке може бути встановлено.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
, однак, здається, працює.
Якщо вам потрібно повернути тіло причини, перегляньте WebFaultException
Наприклад
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
WebFaultException
щоб повернути HttpStatusCode.Created
?
Для 404 існує вбудований метод на WebOperationContext.Current.OutgoingResponse з назвою SetStatusAsNotFound (рядок повідомлення), який встановить код стану 404 та опис стану одним викликом.
Зверніть увагу, що існує також SetStatusAsCreated (розташування Uri), який встановить код стану 201 і заголовок розташування одним викликом.
Якщо ви хочете побачити опис стану в заголовку, метод REST повинен переконатися, що повертає null із розділу Catch (), як показано нижче:
catch (ArgumentException ex)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
return null;
}
Ви також можете повернути StatusCode і причину тіла з WebOperationContext «s StatusCode і 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());
У мене це не спрацювало для WCF Data Services. Натомість ви можете використовувати DataServiceException у випадку Служб даних. Наступний пост знайшов корисним. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de