Как я могу вернуть пользовательский код статуса HTTP из метода WCF REST? - PullRequest
85 голосов
/ 26 сентября 2008

Если в вызове WCF REST что-то идет не так, как, например, запрошенный ресурс не найден, как я могу поиграть с кодом ответа HTTP (например, установив что-то вроде HTTP 404) в методе OperationContract? *

Ответы [ 7 ]

105 голосов
/ 26 сентября 2008

Существует WebOperationContext, к которому вы можете получить доступ, и у него есть OutgoingResponse свойство типа OutgoingWebResponseContext, которое имеет StatusCode свойство, которое можно установить.

WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
70 голосов
/ 24 ноября 2010

Если вам нужно вернуть тело причины, взгляните на WebFaultException

Например

throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
23 голосов
/ 26 сентября 2008

Для 404 есть встроенный метод в WebOperationContext.Current.OutgoingResponse с именем SetStatusAsNotFound (строковое сообщение) , который устанавливает код состояния на 404 и описание статуса с одним вызов.

Обратите внимание, что также есть, SetStatusAsCreated (Uri location) , который установит код состояния на 201 и заголовок местоположения одним вызовом.

2 голосов
/ 18 марта 2011

Если вы хотите увидеть описание статуса в заголовке, метод REST должен обязательно вернуть null из раздела Catch (), как показано ниже:

catch (ArgumentException ex)
{
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
    WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
    return null;
}
1 голос
/ 24 мая 2018

Вы также можете вернуть код состояния и тело причины с помощью WebOperationContext StatusCode и StatusDescription :

WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
1 голос
/ 17 августа 2015
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());

ссылка: https://social.msdn.microsoft.com/Forums/en-US/f6671de3-34ce-4b70-9a77-39ecf5d1b9c3/weboperationcontext-http-statuses-and-exceptions?forum=wcf

0 голосов
/ 04 апреля 2011

Это не сработало для меня в Службах данных WCF. Вместо этого вы можете использовать DataServiceException в случае Data Services. Нашел следующий пост полезным. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...