2013-05-18 2 views
6

Я использую RestSharp для разработки на стороне клиента. Я также использую Ruby Grape gem для моего пользовательского API на стороне сервера. Виноградный камень может сделать управление версиями, установив Accept заголовка HTTP f.e к application/vnd.twitter-v1+jsonRestSharp Принять изменение заголовка

И тестовую команду через консоль отлично работает

curl -H Accept=application/vnd.twitter-v1+json /statuses/public_timeline 

Но когда я пытаюсь настроить заголовок для RestRequest я получаю error 404 на сервере.

Я понятия не имею, почему так. Я нашел еще одну проблему, что сервер возвращает 406 error - но в моем случае 404.

Как я могу поместить пользовательское значение для заголовка Accept?

ответ

5

Вы можете установить пользовательские Accept заголовок с помощью метода AddHeader ...

var client = new RestClient("http://example.com/api"); 
var request = new RestRequest("statuses/public_timeline", Method.GET); 
request.AddHeader("Accept", "application/vnd.twitter-v1+json"); 
var response = client.Execute(request); 
var json = response.Content; 

Это должно работать нормально, если вы готовы десериализации JSON самостоятельно.


Если вы хотите использовать родовой Execute<T> метода, который делает автоматические десериализации для вас, вы столкнетесь с проблемами ...

От RestSharp documentation about deserialization:

RestSharp включает в себя десериализаторы для обработки XML и JSON. Получив ответ, RestClient выбирает правильный десериализатор для использования на основе типа содержимого, возвращаемого сервером. Значения по умолчанию могут быть переопределены (см. Настройка). Встроенные типы контента поддерживаются:

  • приложения/JSON - JsonDeserializer
  • приложение/XML - XmlDeserializer
  • текст/JSON - JsonDeserializer
  • текст/XML - XmlDeserializer
  • * - XmlDeserializer (все другие типы содержимого не указаны)

Это говорит, что по умолчанию, если тип контента ответа не является одним из перечисленных, RestSharp попытается использовать XmlDeserializer для ваших данных. Это настраивается, но с дополнительной работой.