0

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
    }
}

Win8でjsonパラメーターを使用してリクエストを送信する別の方法があるかもしれませんか?

更新私は解決策を見つけました:

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();
        }
    }
}

それはうまく機能しますが、もっと簡単な方法が存在する必要があります(願っています)。そして、私はそれを見つけよ うとします。

4

2 に答える 2

0

その時点で、このソリューションが最も役立ちます。

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();
        }
    }
}
于 2013-04-22T08:28:30.360 に答える
0

2 つのコード スニペットを使用してデータを投稿すると、リクエストにいくつかの違いが見られます。

最初のコードサンプルの未加工の投稿は次のとおりです(機能しないとあなたは言います):

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"
}

2 つの要求の違いは次のとおりです。

  1. 最初のリクエストでは、コンテンツ タイプは設定されません。
  2. 最初のリクエストでは、コンテンツは UTF8 でエンコードされています。

動作しないコードを修正するには、次のいずれかまたは両方を試すことをお勧めします。

  1. コンテンツ タイプを application/json に設定します
  2. リクエストを UTF8 エンコードしない
于 2013-04-18T18:13:04.077 に答える