Как я могу вернуть собственный код состояния HTTP из метода REST WCF?

StackOverflow https://stackoverflow.com/questions/140104

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;

Другие советы

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

Например

throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );

Для 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;
}
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

Вы также можете вернуть код состояния и тело причины с помощью ВебОператионКонтекст's СтатусКод и СтатусОписание:

WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top