0

1 つの Postback メソッドと 2 つ目の静的 Webmethod 呼び出しを含むテスト ログイン ページ (.aspx) を作成しました。JavaScript 関数は「txt1」と「txt2」から値を取得し、C# [WebMethod] を呼び出します。

HTML:

<input type="text" id="txt1" />
<input type="text" id="txt2" />

//JS function sends values to C# WebMethod
PageMethods.ReceiveUsernamePassword(txt1.value, txt2.value);

C#:

    [WebMethod]
    public static string ReceiveUsernamePassword(string user, string pass)
    {
        File.AppendAllText(@"C:\Z\upjs.txt", user + " " + pass + " js " + "\r\n\r\n\r\n");
        return "Success JS";
    }

以下のコードを使用して POST をシミュレートする別のクライアント アプリ。URL は localhost:1073/PostData_Server/Default.aspx/ReceiveUsernamePassword を指しています。

using (WebClient client = new WebClient())
        {
            System.Collections.Specialized.NameValueCollection reqparm = new System.Collections.Specialized.NameValueCollection();
            reqparm.Add("user", "user1");
            reqparm.Add("pass", "password1");
            byte[] responsebytes = client.UploadValues("http://local:1073/PostData_Server/Default.aspx", "POST", reqparm);
            string responsebody = Encoding.UTF8.GetString(responsebytes);
        }

Firebug POST データ

Firebug の応答

テスト クライアント アプリで "Success" または "Success JS" を取得する代わりに、HTML ドキュメント全体を応答メッセージとして受信しています。また、サーバー側にテキスト ファイルは書き込まれません。Poster( https://addons.mozilla.org/en-us/firefox/addon/poster/ ) をダウンロードして、クライアント アプリのエラーではないことを確認しました。これも、HTML ドキュメント全体を応答として受け取ります。どうすればこれを修正できますか?

4

1 に答える 1

0

この質問に関する調査結果を更新すると思いました。[WebMethod] を呼び出すには、ContentType を "application/json" に設定する必要があります。ContentType を変更できないため、WebClient.UploadValues() も使用できません。したがって、正しい POST 署名を送信するには、HttpWebRequest クラスを使用する必要があります。

また、注意: 送信されるユーザー名とパスワードは json 形式でなければなりません!

    HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
    myHttpWebRequest.Method = "POST";
    myHttpWebRequest.ContentType = "application/json; encoding=utf-8";

    using (var streamWriter = new StreamWriter(myHttpWebRequest.GetRequestStream()))
    {
        string json = "{user:\"user1\",pass:\"pass1\"}";

        streamWriter.Write(json);
        streamWriter.Flush();
    }

    var httpResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
        responsebody = streamReader.ReadToEnd();
    }
于 2014-05-05T18:06:56.977 に答える