0

こんにちは私は次のJSON文字列をAppEngineサーバーに送信しようとしています。文字列は次のようになります。

{"param2":50.0,"param1":50.0,"additionalParams":{"param3":"123","userID":"1234561"}}

そして、私がそれを送信するために使用するコードは以下のとおりです。

public async Task<string> SendJSONData(string urlToCall, string JSONData)
    {
        // server to POST to
        string url = urlToCall;

        // HTTP web request
        var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
        httpWebRequest.ContentType = "action";
        httpWebRequest.Method = "POST";

        // Write the request Asynchronously 
        using (var stream = await Task.Factory.FromAsync<Stream>(httpWebRequest.BeginGetRequestStream,
                                                                 httpWebRequest.EndGetRequestStream, null))
        {
            //create some json string
            string json = JSONData;

            // convert json to byte array
            byte[] jsonAsBytes = Encoding.UTF8.GetBytes(json);

            // Write the bytes to the stream
            await stream.WriteAsync(jsonAsBytes, 0, jsonAsBytes.Length);
        }

        WebResponse response = await httpWebRequest.GetResponseAsync();
        StreamReader requestReader = new StreamReader(response.GetResponseStream());
        String webResponse = requestReader.ReadToEnd();
        return webResponse;
}

Fiddlerを使用して、サーバーに送信されているものをスニッフィングしました。

POST http://server.appspot.com/method HTTP/1.1
Accept: */*
Content-Length: 85
Accept-Encoding: identity
Content-Type: action
User-Agent: NativeHost
Host: server.appspot.com
Connection: Keep-Alive
Cache-Control: no-cache
Pragma: no-cache

{"param2":50.0,"param1":50.0,"additionalParams":{"param3":"123","userID":"1234561"}}

「Content-Type」パラメーターを「text/plain」と「application/json」の両方に設定して実験したことを覚えておいてください。それでも、サーバーからの回答は次のようになります。

HTTP/1.1 500 Internal Server Error
Date: Wed, 20 Feb 2013 18:54:34 GMT
Content-Type: text/html; charset=UTF-8
Server: Google Frontend
Content-Length: 466


<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>500 Server Error</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Server Error</h1>
<h2>The server encountered an error and could not complete your request.<p>If the            problem persists, please <A HREF="http://code.google.com/appengine/community.html">report</A> your problem and mention this error message and the query that caused it.</h2>

希望の「OK」応答を受け取るにはどうすればよいですか?

4

1 に答える 1

0

さて、問題は私のPOSTに「アクション」パラメータがないことでした。回避策は次のようになります。

    // Write the request Asynchronously 
    using (var stream = await Task.Factory.FromAsync<Stream>
    (httpWebRequest.BeginGetRequestStream,httpWebRequest.EndGetRequestStream, null))
    {
        //create some json string
        string json = "action="+JSONData;

        // convert json to byte array
        byte[] jsonAsBytes = Encoding.UTF8.GetBytes(json);

        // Write the bytes to the stream
        await stream.WriteAsync(jsonAsBytes, 0, jsonAsBytes.Length);
    }
于 2013-02-20T22:37:16.397 に答える