Задайте заголовок Content-Type с помощью RestSharp
Я создаю клиент для службы чтения RSS. Я использую библиотеку RestSharp для взаимодействия с их API.
API гласит:
При создании или обновлении записи вы должны установить application/json;charset=utf-8
в качестве заголовка Content-Type
.
Вот как выглядит мой код:
RestRequest request = new RestRequest("/v2/starred_entries.json", Method.POST);
request.AddHeader("Content-Type", "application/json; charset=utf-8");
request.RequestFormat = DataFormat.Json;
request.AddParameter("starred_entries", id);
//Pass the request to the RestSharp client
Messagebox.Show(rest.ExecuteAsPost(request, "POST").Content);
Однако
; служба возвращает ошибку
Error 415: Please use the 'Content-Type: application/json; charset=utf-8' header
Почему RestSharp не передает заголовок?
Ответы
Ответ 1
Решение, представленное в моем блоге, не проверяется вне версии 1.02 RestSharp. Если вы отправите комментарий на мой ответ с вашей конкретной проблемой с моим решением, я могу его обновить.
var client = new RestClient("http://www.example.com/where/else?key=value");
var request = new RestRequest();
request.Method = Method.POST;
request.AddHeader("Accept", "application/json");
request.Parameters.Clear();
request.AddParameter("application/json", strJSONContent, ParameterType.RequestBody);
var response = client.Execute(request);
Ответ 2
В версии 105.2.3.0 я могу решить проблему следующим образом:
var client = new RestClient("https://www.example.com");
var request = new RestRequest("api/v1/records", Method.POST);
request.AddJsonBody(new { id = 1, name = "record 1" });
var response = client.Execute(request);
Старый вопрос, но все еще вершин моего поиска - добавление для полноты.
Ответ 3
Хотя это немного устарело: я столкнулся с одной и той же проблемой. Кажется, некоторые атрибуты, такие как "тип содержимого" или "дата", не могут быть добавлены как параметр, но добавлены внутри. Чтобы изменить значение "content-type", мне пришлось изменить настройку serialzer (хотя я его не использовал, потому что я добавил json в тело, которое было сериализовано раньше!)
RestClient client = new RestClient(requURI);
RestRequest request = new RestRequest(reqPath, method);
request.JsonSerializer.ContentType = "application/json; charset=utf-8";
как только я это сделал, заголовок появился, как предполагалось:
System.Net Information: 0 : [5620] ConnectStream#61150033 - Header
{
Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
User-Agent: RestSharp 104.1.0.0
Content-Type: application/json; charset=utf-8
...
}
Ответ 4
Вероятно, вы столкнулись с этой проблемой: https://github.com/restsharp/restsharp/issues/221 В вашей проблеме есть рабочее решение @http://itanex.blogspot.co.at/2012/02/restsharp-and-advanced-post-requests.html
Ответ 5
request.XmlSerializer = new DotNetXmlSerializer();
request.Parameters.Clear();
request.AddParameter(new Parameter()
{
ContentType = "application/xml",
Name = "application/xml",
Type = ParameterType.RequestBody,
Value = request.XmlSerializer.Serialize(deleteUserQuery.UserDelRqHeader)
});
request.AddHeader("Accept", "application/xml");
Ответ 6
Вот решение
http://restsharp.blogspot.ca/
Создайте объект json с одинаковыми свойствами имени и задайте значения (убедитесь, что они похожи на пары имени для почтового запроса).
После этого используйте по умолчанию httpclient.