2010-09-25 82 views
1

非常感谢您花时间阅读我的文章!我在从C#Desktop应用程序将数据发布到C#asp.net网页时遇到问题。我相信问题在于桌面应用程序(或者至少有一个问题!)我还会发布我正在使用的asp.net代码。如果asp.net不是你的专长,不要担心,我只是想知道在那里是否有明显的表现。将数据发布到asp.net网页的问题(桌面C#结束的问题)

我还必须创建一个asp.net网站来发布数据到Windows窗体应用程序。这是完美的。

这是我使用的代码。下面讨论什么是不工作的。我对所有这些asp.net的东西都非常不满,所以你可以提供的任何帮助将非常感谢。

if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() && result == DialogResult.Yes) 
      { 
       string test = "Test"; 
       WebRequest request = WebRequest.Create("http://localhost/test.aspx"); 
       byte[] byteArray = Encoding.UTF8.GetBytes(test); 

       request.Method = "POST"; 
       request.ContentType = "application/x-www-form-urlencoded"; 
       request.ContentLength = byteArray.Length; 

       // Give the response 
       using (Stream datastream = request.GetRequestStream()) 
       { 
        datastream.Write(byteArray, 0, byteArray.Length); 
       } 
      } 

然而,当我调试应用程序,并把一个断点刚刚datastream.Write()之后,我得到的变量观察窗口中的一些错误。除了那里,我没有任何例外。

我无法上传图像到这个网站,所以我会上传到一个FreeWebs网站 - 抱歉,真的很尴尬! watch.jpg

正如你所看到的,我收到System.NotSupported上datastream.Length和datastream.Position

能否请你帮我解决这个问题?谢谢!

万一一个asp.net程序员也看到这一点,没有任何问题,这个接收码?:

protected void Page_Load(object sender, EventArgs e) 
    { 
     string test = Request.BinaryRead(Request.TotalBytes).ToString(); 
    } 

谢谢大家,所以,这么多的时间!

理查德

编辑:关于gandjustas的评论,我提供更多的信息。

链中的某些东西无法正常工作。我没有得到任何正式的例外报告。

如果我在asp.net网页使用此代码:

string test = Request.BinaryRead(Request.TotalBytes).ToString(); 

     Response.Clear(); 
     Response.Write(test); 
     Response.End(); 

我获得以下响应回:System.Byte []

这不是一个变量,而是包含字符串任意的文字和符号'System.Byte []'

东西不工作(很明显)然后我看到这个System.NotSupportedException在我的Watch窗口。这让我认为有两个错误:这个System.NotSupportedException需要在我的C#桌面应用程序中修复,并且在我甚至从应用程序发送POST之前,我的asp.net网页不应该显示System.Byte []。

我需要帮助。谢谢!

+0

什么是错误?观察窗口中的NotSuppeortedException或不发送请求? – gandjustas 2010-09-25 09:29:19

+0

这是足够的额外细节,还是我留下了什么?谢谢! – niemiro 2010-09-25 09:55:21

回答

2

夫妇对你的代码的言论:

  1. 要设置application/x-www-form-urlencoded内容类型,但您要发送一些任意的字节数组。当你设置这个内容类型时,服务器会期望使用它编码请求。
  2. 您在调试窗口中获得的NotSupportedException是正常的。您无法使用NetworkStream上的Length财产。

让我尽量简化的情况下,你的代码,你真的想用application/x-www-form-urlencoded

客户:

using (var client = new WebClient()) 
{ 
    var values = new NameValueCollection 
    { 
     { "key1", "value1" }, 
     { "key2", "value2" }, 
    }; 
    byte[] result = client.UploadValues("http://example.com/test.aspx", values); 
} 

服务器:

protected void Page_Load(object sender, EventArgs e) 
{ 
    string key1 = Request["key1"]; 
    string key2 = Request["key2"]; 
} 
+0

你好!我非常感谢你的回应!它几乎在工作,但仍然有一件事缺失。网页结束现在完美。如果我输入:http:// localhost:51274/test.aspx?key1 = test&key2 = test2它会产生一个完美的响应。但是,当我运行我的程序时,它仍然无法正常工作。如果我修改网页以返回key1,key2的值,然后单词“Test”,则返回单词“Test”,因此网页显然被调用,但出于某种非常奇怪的原因,有一个不祥之兆应该出现value1和value2的洞。他们要么不是 – niemiro 2010-09-25 11:35:03

+0

对不起,我不明白你的问题。你能否澄清问题所在? – 2010-09-25 11:36:11

+0

上传,或上传完全空白。有任何想法吗?非常感谢!附:对不起,我之前想发布这些内容,我不习惯进入发布而不是新行! – niemiro 2010-09-25 11:38:27

1

试试这个

  string test = "Test"; 
      WebRequest request = WebRequest.Create("http://localhost/test.aspx"); 

      request.Method = "POST"; 
      request.ContentType = "text/xml;charset=utf-8"; 
      request.ContentLength = test.Length; 

      using (StreamWriter paramWriter = new StreamWriter(request.GetRequestStream())) 
      { 
       paramWriter.Write(test, 0, test.Length); 

      } 

      WebResponse wres = request.GetResponse(); 
      StreamReader sr = new StreamReader(wres.GetResponseStream()); 
      string outdata = sr.ReadToEnd().Trim(); 
+0

给我几分钟试试吧! – niemiro 2010-09-25 11:34:12

1

您似乎在WebRequest类上使用MSDN的HowTo,那是正确的吗?

尝试使用NameValueCollection,就像达林说和,而不是使用一个字节数组操作如下:

using (var client = new WebClient()) 
{ 
    var values = new NameValueCollection 
    { 
     { "key1", "value1" }, 
     { "key2", Convert.ToBase64String(File.ReadAllBytes(test)) }, 
    }; 
    byte[] result = client.UploadValues("http://example.com/test.aspx", values); 
} 

您也可以尝试改变内容类型;请检查示例herehere

+0

非常感谢您的回复!我确实使用过那篇HowTo文章,它盲目地从它复制了application/x-www-form-urlencoded,这似乎是问题的一半!我只是要阅读你现在链接到的那两篇文章。非常感谢你这么好的链接! – niemiro 2010-09-25 12:54:26