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

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

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

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

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

Например

 throw new WebFaultException("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()); 

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

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

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

 WebOperationContext context = WebOperationContext.Current; context.OutgoingResponse.StatusCode = HttpStatusCode.OK; context.OutgoingResponse.StatusDescription = "Your Message"; 
  • Различные формы интерфейса контракта службы WCF
  • Возврат сервиса WCF «Метод не разрешен»
  • Как десериализация WCF создает объекты без вызова конструктора?
  • Максимальная квота длины массива
  • Что означает эта ошибка WCF: «Предупреждение о настраиваемом инструменте: невозможно импортировать wsdl: portType»
  • Каков наилучший способ обхода проблемы WCF с использованием `` `WCF?
  • Безопасность сообщений WCF без сертификата и windows auth
  • Может ли web.config читать из внешнего XML-файла?
  • Отчеты в SOA (Business Intelligence & Service Oriented Architecture)
  • Подробное исследование исключения таймаута WCF
  • как создать уникальный токен, срок действия которого истекает через 24 часа?
  • Interesting Posts

    Как подписать апплет Java для использования в браузере?

    Как сделать firefox без головы программно в Selenium с python?

    Как использовать Ajax.ActionLink?

    Как считать два разных столбца?

    Разница между Label и TextBlock

    Когда использовать margin vs padding в CSS

    Есть ли способ получить количество меток чисел, используемых в файле jar

    NSNotificationCenter против делегирования (используя протоколы)?

    Как определить прокрутку страницы до определенной точки в jQuery?

    Существует ли class диапазона в C ++ 11 для использования с диапазоном, основанным на циклах?

    Является ли CLR виртуальной машиной?

    Все библиотеки com.android.support должны использовать ту же самую спецификацию версии

    Возможно ли регистрировать события файловой системы в Windows или Linux?

    Как я могу сказать jackson игнорировать свойство, для которого у меня нет контроля над исходным кодом?

    Максимально на значениях заголовка HTTP?

    Давайте будем гением компьютера.