在Windows 8 (RT)上请求json参数

本文关键字:请求 json 参数 RT Windows | 更新日期: 2023-09-27 18:07:25

我正在寻找解决方案发送请求与JSON类似的参数到服务器。

我使用这个代码,

var httpClient = new HttpClient();
var tempByteArray = Encoding.UTF8.GetBytes("my valid json");
var stream = new MemoryStream(tempByteArray);
var streamContent = new StreamContent(stream);
var request = new HttpRequestMessage(HttpMethod.Post, Constants.LocalServer);
request.Content = streamContent;
request.Headers.TransferEncodingChunked = true;
HttpResponseMessage response = await httpClient.SendAsync(request);

但是我得到:

{
    StatusCode: 501,
    ReasonPhrase: 'NotImplemented',
    Version: 1.0,
    Content: System.Net.Http.StreamContent,
    Headers: {
        X-Squid-Error: ERR_UNSUP_REQ0X-Cache: MISSfromproxy3.itos.orgX-Cache-Lookup: NONEfromproxy3.companyname.org: portProxy-Connection: closeDate: Thu,
        18Apr201309: 17: 53GMTServer: squid/2.6.STABLE21Via: 1.0proxy3.companyname.org: port(squid/2.6.STABLE21)Content-Length: 1099Content-Type: text/htmlExpires: Thu,
        18Apr201309: 17: 53GMT
    }
}

可能有另一种方式发送请求与json参数在Win8?

UPDATE I found solution:

public static async Task<string> LoadData(string json, string serverUrl)  
{
    var request = (HttpWebRequest)WebRequest.Create(new Uri(Constants.LocalServer));
    request.ContentType = "application/json";
    request.Method = "POST";
    using (var requestStream = await request.GetRequestStreamAsync())
    {
        var writer = new StreamWriter(requestStream);
        writer.Write(json);
        writer.Flush();
    }
    using (var resp = await request.GetResponseAsync())
    {
        using (var responseStream = resp.GetResponseStream())
        {
            var reader = new StreamReader(responseStream);
            return  = reader.ReadToEnd();
        }
    }
}
这是伟大的工作,但必须有更简单的方法(我希望)。我将尝试找到它。

在Windows 8 (RT)上请求json参数

当我使用您的两个代码片段发布数据时,我看到请求中的一些差异。

这是第一个代码示例的原始帖子(你说不工作):

POST http://testing.foo.com/api/Values HTTP/1.1
Host: testing.foo.com
Expect: 100-continue
Connection: Keep-Alive
Content-Length: 75
{
id:"1",
title:"title text",
post:"post text",
isDeleted:"False"
}

这是你更新代码的原始帖子(你说有效的代码):

POST http://testing.foo.com/api/Values HTTP/1.1
Content-Type: application/json
Host: testing.foo.com
Content-Length: 75
Expect: 100-continue
{
id:"2",
title:"title text",
post:"post text",
isDeleted:"False"
}

两个请求的区别如下:

  1. 在第一个请求中,内容类型从未设置。
  2. 第一个请求的内容是UTF8编码。

要修复不工作的代码,我建议您尝试以下一种或两种:

  1. 设置内容类型为application/json
  2. 非UTF8编码请求

这时这个解决方案是最有用的。

public static async Task<string> LoadData(string json, string serverUrl)  
{
    var request = (HttpWebRequest)WebRequest.Create(new Uri(Constants.LocalServer));
    request.ContentType = "application/json";
    request.Method = "POST";
    using (var requestStream = await request.GetRequestStreamAsync())
    {
        var writer = new StreamWriter(requestStream);
        writer.Write(json);
        writer.Flush();
    }
    using (var resp = await request.GetResponseAsync())
    {
        using (var responseStream = resp.GetResponseStream())
        {
            var reader = new StreamReader(responseStream);
            return  = reader.ReadToEnd();
        }
    }
}