3

C# で記述された Windows アプリがあります。このアプリはユーザーのデスクトップに展開されます。すでに作成されているバックエンドとやり取りします。バックエンドは ASP.NET MVC 3 で記述されています。次に示すように、多数の GET 操作と POST 操作が公開されています。

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult GetItem(string id, string caller) 
{ 
  // Do stuff 
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveItem(string p1, string p2, string p3)
{
  // Do stuff
}

私のチームの Web 開発者は、JQuery を介してこれらの操作と正常にやり取りしています。だから私は彼らが働くことを知っています。しかし、Windows C# アプリからそれらを操作する方法を理解する必要があります。私は WebClient を使用していましたが、パフォーマンスの問題が発生したため、WebRequest オブジェクトを使用するように相談されました。これを試みる正直な努力で、私は次のことを試しました:

WebRequest request = HttpWebRequest.Create("http://www.myapp.com/actions/AddItem"); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded";  
request.BeginGetResponse(new AsyncCallback(AddItem_Completed), request); 

私の問題は、実際にデータ (パラメーター値) をエンドポイントに送り返す方法がわからないことです。パラメータ値を GET および POST 操作に戻すにはどうすればよいですか? 誰か助けてくれませんか?ありがとうございました!

4

2 に答える 2

4

1 つの方法は、入力を要求ストリームに書き込むことです。入力をバイト配列にシリアル化する必要があります。以下のサンプル コードを参照してください。

        string requestXml = "someinputxml";
        byte[] bytes = Encoding.UTF8.GetBytes(requestXml);

        var request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "POST";
        request.ContentLength = bytes.Length;
        request.ContentType = "application/xml";

        using (var requestStream = request.GetRequestStream())
        {
            requestStream.Write(bytes, 0, bytes.Length);
        }

        using (var response = (HttpWebResponse)request.GetResponse())
        {
            statusCode = response.StatusCode;

            if (statusCode == HttpStatusCode.OK)
            {                   
                responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
            }
        }
于 2012-04-23T17:10:19.777 に答える
1

さて、WebClient最も単純な例では、次のようになります。

NameValueCollection postData = new NameValueCollection();
postData["field-name-one"] = "value-one";
postData["field-name-two"] = "value-two";

WebClient client = new WebClient();
byte[] responsedata = webClient.UploadValues("http://example.com/postform", "POST", postData);

これを試しましたか?

于 2012-04-23T17:03:55.723 に答える