C# 使用哈希表对象作为POST请求的主体/参数(Xamarin Mono中的RestSharp)

C# 使用哈希表对象作为POST请求的主体/参数(Xamarin Mono中的RestSharp),c#,post,mono,xamarin,restsharp,C#,Post,Mono,Xamarin,Restsharp,我在与RestSharp进行POST请求时遇到问题。我的哈希表对象“param”包含必须发布到服务器的键值对。我尝试了几种组合,在服务器端得到了奇怪的输出 示例1: var client = new RestClient(); var request = new RestRequest(url, Method.POST); request.RequestFormat = DataFormat.Json; request.AddBody (param); var client = new

我在与RestSharp进行POST请求时遇到问题。我的哈希表对象“param”包含必须发布到服务器的键值对。我尝试了几种组合,在服务器端得到了奇怪的输出

示例1:

var client = new RestClient();
var request = new RestRequest(url, Method.POST);  
request.RequestFormat = DataFormat.Json;
request.AddBody (param);  
var client = new RestClient();
var request = new RestRequest(url, Method.POST);  
foreach(DictionaryEntry entry in param){
 request.RequestFormat = DataFormat.Json;
 request.AddParameter ((entry.Key.ToString()), entry.Value);
}  
var client = new RestClient();
var request = new RestRequest(url, Method.POST);  
String paramJson = SimpleJson.SerializeObject (param);
request.RequestFormat = DataFormat.Json;
request.AddBody (paramJson);  
输出:

示例2:

var client = new RestClient();
var request = new RestRequest(url, Method.POST);  
request.RequestFormat = DataFormat.Json;
request.AddBody (param);  
var client = new RestClient();
var request = new RestRequest(url, Method.POST);  
foreach(DictionaryEntry entry in param){
 request.RequestFormat = DataFormat.Json;
 request.AddParameter ((entry.Key.ToString()), entry.Value);
}  
var client = new RestClient();
var request = new RestRequest(url, Method.POST);  
String paramJson = SimpleJson.SerializeObject (param);
request.RequestFormat = DataFormat.Json;
request.AddBody (paramJson);  
输出:

#2的输出似乎正确,但我在服务器端得到了一个401。奇怪的是,GET输出与#2的匹配,但请求成功发出。我认为问题可能是请求总共发布了10个参数,但它应该在主体中发布一个JSON格式的字符串。通常,我会在正文中放入JSON格式的字符串,但即使使用独立的JSON序列化程序获取哈希表的JSON字符串并放入AddBody,我也会得到以下结果:

示例3:

var client = new RestClient();
var request = new RestRequest(url, Method.POST);  
request.RequestFormat = DataFormat.Json;
request.AddBody (param);  
var client = new RestClient();
var request = new RestRequest(url, Method.POST);  
foreach(DictionaryEntry entry in param){
 request.RequestFormat = DataFormat.Json;
 request.AddParameter ((entry.Key.ToString()), entry.Value);
}  
var client = new RestClient();
var request = new RestRequest(url, Method.POST);  
String paramJson = SimpleJson.SerializeObject (param);
request.RequestFormat = DataFormat.Json;
request.AddBody (paramJson);  
输出:

我很好奇为什么RestSharp创建的JSON字符串的开头包含“_JSON”

谢谢,
John你的服务器运行Rails吗?也许这是相关的


如果您可以控制服务器端,最好使用AddParameter并传递一个JSON字符串,您可以在服务器端解析该字符串。

嘿,John,您解决了这个问题吗?660人来到这个问题上寻求答案:)