我试图通过POST使用HttpWebRequest对象调用RESTful服务。我试图通过包含url编码字符串的Request主体传递1个变量。我看到请求到达服务器时;但是,它显示了2个表单变量。第一个是Form [null],第二个是我的变量。
我试图找到这个NULL键的来源;但是,我不能。关于我如何能够解决这个问题的任何想法,因为当我尝试将它用于.Net的Nancy web框架时它会引发问题。
代码:
var request = WebRequest.Create("http://localhost:8888/RouteName") as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
var jsonString =
"[\"00000000-0000-0000-000000000001\",\"00000000-0000-0000-000000000002\"]";
var data = new StringBuilder();
data.Append("Keys=" + HttpUtility.UrlEncode(jsonString));
byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
request.ContentLength = byteData.Length;
using (var requestStream = request.GetRequestStream())
{
requestStream.Write(byteData, 0, byteData.Length);
}
using (var response = request.GetResponse() as HttpWebResponse)
{
// ends up with a 500 response.
}
答案 0 :(得分:2)
我没有在很大程度上使用Webrequest,主要是因为我发现webclient对我来说更容易使用。 这是一个使用Webclient使用POST发送数据的快速示例:
class Program
{
static void Main(string[] args)
{
var webclient = new WebClient();
var valueToSend = new Message("some data", "some other data");
var parameters = new NameValueCollection
{
{"Key", Jsonify(valueToSend)}
};
webclient.UploadValues(
"http://localhost:8888/Ny",
"POST",
parameters);
}
static string Jsonify(object data)
{
using (MemoryStream ms = new MemoryStream())
{
var ser = new DataContractJsonSerializer(data.GetType());
ser.WriteObject(ms,data);
return Encoding.Default.GetString(ms.ToArray());
}
}
}
这种迁移不是你想要的,但它会带走许多潜在的错误来源。