2013-07-23 21 views
24

我正在为RSS阅读服务构建客户端。我正在使用RestSharp库与其API进行交互。使用RestSharp设置'Content-Type'标题

的API状态:

当创建或更新您必须设置应用程序/ 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); 

然而,该服务正在返回“错误415:请使用'Content-Type:application/json; charset = utf-8'标题。”为什么RestSharp不通过标题?

+0

我对RestSharp不熟悉,但我会使用Fiddler检查请求以确定RestSharp IS传递的是什么。可能是Content-Type头已经被添加了,你需要替换或删除/添加它。 我会假设'request.RequestFormat = DataFormat.Json'为你设置Content-Type标题。 –

+0

我试过了,没有这条线。唯一的选择是JSON或XML。 –

+0

请发布请求在Fiddler中的外观,它会告诉我们是否添加了Content-Type,而不是仅仅猜测。 – Darius

回答

37

提供my blog该解决方案超越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); 
+2

在我的具体情况中,'strJSONContent'变量应该包含什么内容? –

+1

strJSONContent是表示要在POST请求期间发送的数据的JSON字符串。这必须是有效的JSON,以便服务器可以正确解释它。 使用RestSharp并检查包含JSON字符串的参数时,结果将包含mimetype和数据,如下所示: “application/json = {\”key1 \“:\”value1 \“,\” key2 \“:\”value2 \“}” – itanex

+0

这对你有所帮助@ShaneGowland – itanex

-3

下面是解

http://restsharp.blogspot.ca/

创建具有相同名称的属性JSON对象和设置的值(确保它们类似于那些名称值对POST请求的。)

之后,使用默认httpclient。

8

虽然这是有点旧:我遇到了同样的问题..似乎有些属性,如“内容类型”或“日期”不能作为参数添加,但在内部添加。要改变的“内涵式”的值,我不得不尽快改变serialzer设置(altough我didn`t使用它,因为我加在体内的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 
    ... 
} 
17

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

老问题,但还是顶 - 添加的完整性。

+0

这是当前版本的restsharp 105.2.3最优雅的解决方案 – BrokeMyLegBiking