【问题标题】:Pass data with POST method from WinForm to WebForm and retrieve it使用 POST 方法将数据从 WinForm 传递到 WebForm 并检索它
【发布时间】:2015-04-24 13:42:21
【问题描述】:

有人知道通过'POST' 方法从Windows 窗体应用程序发送intstringbyte[] 并在ASP.NET WebForm 中获取此数据的简单方法吗?

所以,事实上:

Form1 (data) -→ (data) WebPage1.aspx

这是我现在的代码中的内容: 客户端:

    String idtostring = "id=" + opid.ToString();
    intarray = Encoding.ASCII.GetBytes(idtostring);
    startlog(intarray);

    private void startlog(byte[] array)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:51146/MyPage.aspx");
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = array.Length;
        var Url = "http://localhost:51146/MyPage.aspx";
        wb.Navigate(Url, true);
        Stream postdata = request.GetRequestStream();
        postdata.Write(array, 0, array.Length);
        postdata.Close();
    }

服务器端:

    private String getpostdata()
    {
        return Request.Form["id"];
    }

这返回null...我不知道问题是在客户端还是在服务器端。我需要做的是通过POST 方法从客户端发送一个看起来像“id = 7”的数据并将其返回到服务器上。我正在使用自定义身份验证用户的 id,因此我需要在 Web 浏览器中显示用户将被验证的会话。

更新: 我不确定 Request.Form 是否适合观看...

查看这张图片,它显示了我通过断点得到的结果(我是新手,所以暂时无法发布图片)→http://i.stack.imgur.com/3VTyL.png

我刚试过这个:

    private void startlog(byte[] array)
    {
        var Url = "http://localhost:51146/MyPage.aspx";
        wb.Navigate(Url, "_blank", array, "");
    }

而且结果一模一样……

【问题讨论】:

  • 嗯,网络表单可以读取表单数据。 Win Forms 拥有发布数据的库。 尝试过什么?因为您编写问题的方式基本上是在要求我们为您编写代码。这不是我们来这里的目的。
  • 我试过这个地方有什么:stackoverflow.com/questions/29842443/… 但由于问题太多,一小时后我没有更多选择,所以我需要把它弄起来。 .
  • 在您的帖子中展示您的作品。然后我们可以帮助纠正任何问题。描述你的尝试是如何失败的。
  • 我正在逐步编辑它,以便您可以看到我一直在尝试的内容;)
  • 您只是将字节写入请求,但并未将它们包含在 x-www-form-urlencoded 格式中。不要将字节写入请求,而是将它们转换为 Base 64 字符串并将该字符串作为x-www-form-urlencoded 的一部分嵌入。在服务器端,将 base 64 字符串转换为字节数组。您选择了最困难的数据类型开始:字符串将更容易理解将表单数据发布到服务器的概念。一旦你理解了这一点,你就可以开始使用 int 和 byte 数组了。

标签: c# asp.net post webforms


【解决方案1】:

这是一个字符串示例。

var helloWorldString="HelloWorldKey=HelloWorldValue";
var array= Encoding.ASCII.GetBytes(helloWorldString);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:51146/MyPage.aspx");
request.Method = "POST";
request.ContentLength = array.Length;
request.ContentType = "application/x-www-form-urlencoded";
var Url = "http://localhost:51146/MyPage.aspx";
using(Stream postdata = request.GetRequestStream())
{
    postdata.Write(array, 0, array.Length);
}

在您使用Request.Form["HelloWorldKey"] 阅读的服务器上;

int 比较棘手。在客户端将它们转换为字符串,然后在服务器上将它们解析为整数。

字节数组也是如此。在客户端将它们转换为 Base 64 字符串,然后在服务器上将它们转换回字节数组。

最好使用HttpUtility 对字符串值进行编码,而不是手动进行。详情请见this answer

【讨论】:

  • 这几乎就是我所拥有的,只是我的 String 只是我的 int.toString()。因此,我根据您的建议对其进行了更改,该建议经过改编后给出了 "id=" + id.ToString(); 。我尝试将它恢复到服务器上,但 Request.Form["id"] 为空......但也许我做得不好,我现在在我的服务器上有这个:private String getpostdata(){ return Request.Form["id"]; }
  • @LeReferee 显然这行不通,因为您必须以application/x-www-form-urlencoded 的格式提供它。因为您正在尝试使用它,所以请阅读该格式。它是键/值对。
  • 但是Request.Form["key"]; 部分是我需要的很大一部分:D
  • @LeReferee 如果您不向我展示您正在使用的代码,我无法告诉您您做错了什么。您可以将其编辑到您的问题中。
  • 我之前写了用于 getpostdata() 的代码 ;) private String getpostdata(){ return Request.Form["id"]; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 2013-11-28
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多