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

一种方法是将输入写入请求流。您需要将输入序列化为字节数组请参见下面的示例代码

        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 回答