36

我正在为 RSS 阅读服务构建一个客户端。我正在使用RestSharp库与他们的 API 进行交互。

API 声明:

创建或更新记录时,您必须设置application/json;charset=utf-8Content-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);

然而; 服务返回错误

错误 415:请使用 'Content-Type: application/json; charset=utf-8' 标头

为什么 RestSharp 不通过标题?

4

5 回答 5

69

我的博客上提供的解决方案在RestSharp 1.02 版本之后没有经过测试。如果您针对我的解决方案的具体问题提交评论,我可以更新它。

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);
于 2013-07-29T18:22:42.083 回答
39

在 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);

老问题,但仍然是我搜索的首要问题 - 为了完整性而添加。

于 2016-08-25T09:57:33.900 回答
10

虽然这有点老:我遇到了同样的问题..似乎某些属性,如“内容类型”或“日期”不能作为参数添加,而是在内部添加。要更改“内容类型”的值,我必须更改序列化器设置(尽管我没有使用它,因为我在之前序列化的正文中添加了一个 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
  ...
 }
于 2015-03-17T10:36:55.713 回答
3

你很可能会遇到这个问题:https ://github.com/restsharp/restsharp/issues/221你的问题有一个有效的解决方案@ http://itanex.blogspot.co.at/2012/02/restsharp- and-advanced-post-requests.html

于 2013-07-27T19:12:55.623 回答
-4

这是解决方案

http://restsharp.blogspot.ca/

创建一个具有相同名称属性的json对象并设置值(确保它们与post请求的名称值对相似。)

之后使用默认的httpclient。

于 2014-02-22T20:49:03.157 回答