2

私はしばらくJSONを扱っていますが、これは解決できない問題です。

このプログラムは C# で記述されており、CreateWebRequest() というメソッドがあります。

public void CreateWebRequest()
    {
        CurrentTime = DateTime.Now;
        target = link;
        request = WebRequest.Create(target) as HttpWebRequest;
        request.ContentType = "application/json; charset=utf-8";
        request.Method = "PUT";
        request.ServicePoint.Expect100Continue = false;
        string postData = jsonString;
        System.Console.WriteLine("POSTDATA: " + postData);
        StreamWriter requestWriter;
        using (requestWriter = new StreamWriter(request.GetRequestStream()))
        {
            requestWriter.Write(postData);
        }

    }

結果を取得するためのもう 1 つの関数が呼び出されます: CreateWebResponse():

public void CreateWebResponse()
    {
        WebResponse response;

        string text;
        try
        {
            response = (HttpWebResponse)request.GetResponse();
        }

        catch (WebException e)
        {
            MessageBox.Show(e.Message);
            return;
        }

        using (var sr = new StreamReader(response.GetResponseStream()))
        {
            text = sr.ReadToEnd();
        }

        APIresult apiresult = JsonConvert.DeserializeObject<APIresult>(text); //Deserialize the text

    }

これらの関数はすべて問題なく動作しますが、問題は 1 つだけです。コードは 2 つの要求を実行します。

Mozilla FireFox の RESTClient に同じ JSON を配置すると、JSON は正常に動作します。CreateWebRequest() のみを使用している場合にもうまく機能しますが、両方の方法を使用すると、コードが 2 番目の要求を作成するように見えますか?

応答のみを作成することはできますか? これら 2 つの関数を組み合わせて、直接応答を作成する関数を作成しますか?

私は他の解決策を試し、それらをまとめましたが、どれもうまくいかないようです。応答を呼び出すと、コードが正しく機能しなくなり、2 つの要求が作成されます。

誰にも解決策はありますか?

前もって感謝します。

私が呼び出す JSON 関数にはいくつかの if ステートメントがあり、Firefox の RESTClient に従って正常に動作します。以下のコードは、RESTClient によって正しく呼び出され、C# コードによって 2 回呼び出されるコードを示しています。

$sql = 'SELECT...';
        $result = $db->sql_query($sql);//search for member id.
        if($row = $db->sql_fetchrow($result)){//when found, the user has access.
            $member_id = $row['member_id'];
            $sql = 'SELECT ...';
            $result = $db->sql_query($sql);//search for last login today.
            if($row = $db->sql_fetchrow($result)){//if the user has logged in today update the row. 
                $row_check_in_timestamp = $row['check_in_timestamp'];
                $sql = 'UPDATE ...';//update the row with the check out timestamp
                $db->sql_query($sql);
                break;
            }else{//the user hasn't logged in yet today, log in.
                $start_session_array = array(
                    'club_id'   => (int)$club_id,
                    'member_id' => (int)$member_id,
                    'check_in_timestamp' => (int)time(),
                );
                $sql = 'INSERT ...';//check user in and add a new row in the database
                $db->sql_query($sql);
                break;
            }
        }else{
            break;
        }
4

1 に答える 1

0

解決済み:すべての人に申し訳ありません。すべての回答に感謝しますが、問題が見つかりました。古いバージョンのサービスを常に実行していて、2回目のJSON呼び出しを行いました。

これを理解するために、サーバー側で自分のコードでJSONを呼び出す呼び出しとブロックされたコードをログに記録することでそれを見つけました。

于 2012-10-31T08:24:08.090 に答える