C# 读取和保存post数据

C# 读取和保存post数据,c#,post,listener,file-transfer,C#,Post,Listener,File Transfer,我被指派接替别人的职位,但我对C#不太了解。有一个服务器(192.268.etc)将数据发布到一个站点(未知站点,比如bleh.com) 这是发布代码片段的外观: HttpWebRequest req = (HttpWebRequest)WebRequest.Create( "https://server-ip-here/postlistener?filename=filename.zlib"); req.UseNagleAlgorithm = true; req.AllowWriteSt

我被指派接替别人的职位,但我对C#不太了解。有一个服务器(192.268.etc)将数据发布到一个站点(未知站点,比如bleh.com)

这是发布代码片段的外观:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(
  "https://server-ip-here/postlistener?filename=filename.zlib");

req.UseNagleAlgorithm = true;
req.AllowWriteStreamBuffering = true;
req.Method = "POST";
req.Accept = "application/xml";
req.ServicePoint.Expect100Continue = false;
System.Net.ServicePointManager.CheckCertificateRevocationList = false;
req.Proxy = new WebProxy();

filename = "filename.dat";
byte[] postData = File.ReadAllBytes(filename);
Stream stream = req.GetRequestStream();
stream.Write(postData, 0, postData.Length);
stream.Flush();
stream.Close();

req.BeginGetResponse(new AsyncCallback(responseHandler), this);
我相信我收到了这张表格中的邮寄申请

www.blah.com/upload?filename=file_1234_12389126495129847980.zlib

我不确定如何监听post请求,然后从中获取数据并将其保存为文件

目前我已经尝试过:

 private void Form1_Load(object sender, EventArgs e)
 {
     listener = new HttpListener();
     // listener.Prefixes.Add("http://localhost:8000/");
     listener.Prefixes.Add("http://127.0.0.1:8000/");

     listener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;

     listener.Start();
     listenThread1 = new Thread(new ParameterizedThreadStart(startlistener));
     listenThread1.Start();
 }

 private void startlistener(object s)
 {
     while (true)
     {               
         // blocks until a client has connected to the server
         ProcessRequest();
     }
 }

 private void ProcessRequest()
 {
     var result = listener.BeginGetContext(ListenerCallback, listener);
     result.AsyncWaitHandle.WaitOne();
 }

 private void ListenerCallback(IAsyncResult result)
 {
     var context = listener.EndGetContext(result);
     Thread.Sleep(1000);

     var data_text = new StreamReader(
         context.Request.InputStream,
         context.Request.ContentEncoding).ReadToEnd();

     var cleaned_data = System.Web.HttpUtility.UrlDecode(data_text);

     context.Response.StatusCode = 200;
     context.Response.StatusDescription = "OK";

     MessageBox.Show(cleaned_data);
     context.Response.Close();
 }
它在本地主机上侦听(一旦我们确定它将是什么,它将是网站的次本地主机)

但我不知道如何抓住这个帖子,现在我只能倾听它。理想情况下,我只想接受来自特定IP地址的帖子


你知道我如何获取post数据(将是二进制的)并将其保存为文件吗

嗯。。。您确定创建的项目类型正确吗?对我来说,它更像是一个ASP.net项目,而不是一个WinForms项目。。。创建所有Http基础设施不是一件小事,ASP+IIS提供了所有已经完成的工作。@Gusman我不确定我是否在正确的项目中构建了它哈哈。我没有做c#编码,我只是接手了一个同事,出于某种原因被分配了这个项目。。。我甚至不知道从哪里开始,只是在尽我最大的努力他,好吧,那么你需要的是一个WebAPI项目或ASP项目,它是C#的web对应项目,它将为你处理所有的后期解析,但你需要知道它是如何工作的,只需要看看一些教程(正如我看到的,客户机需要XML响应,这一切闻起来有点像它需要一个SOAP服务,只需查找一些.net WebServices或WCF服务的教程)@Gusman如果我已经可以听到像这样发送到本地主机的帖子,我真的需要WebAPI或ASP项目来抓取数据吗?不仅仅有一些简单的函数来抓取所有数据?也没有简单的函数来获取帖子的URL,这样我就可以计算出文件名了?那么,你必须解码帖子的数据,fi首先,不要使用StreamReader读取数据,因为它将是二进制的(您正在上载一个文件),使用普通流并分块读取数据,直到获得所有内容,要获得文件名,可以使用context.Request.QueryString[“filename”],因为客户机在查询字符串中传递文件名。