如何检索发布的数据(以byte []格式)?

时间:2013-04-04 10:27:52

标签: c# web-applications http-post bytearray

我有一个C#.net Web应用程序。我试图使用此代码将二进制数据从一个应用程序发布到另一个应用程序

    string url = "path to send the data";

    string result=null;
    string postData = "This is a test that posts this string to a Web server.";
    byte[] fileData = Encoding.UTF8.GetBytes (postData);

    // Create a request using a URL that can receive a post. 
    WebRequest request = WebRequest.Create (url);
    // Set the Method property of the request to POST.
    request.Method = "POST";
    // Create POST data and convert it to a byte array.    

    // Set the ContentType property of the WebRequest.
    request.ContentType = "multipart/form-data";
    // Set the ContentLength property of the WebRequest.
    request.ContentLength = fileData.Length;
    // Get the request stream.
    Stream dataStream = request.GetRequestStream ();
    // Write the data to the request stream.
    dataStream.Write (fileData, 0, fileData.Length);
    // Close the Stream object.
    dataStream.Close ();
    // Get the response.
    WebResponse response = request.GetResponse();
    // Display the status.

    result = ((HttpWebResponse)response).StatusDescription;
    // Get the stream containing content returned by the server.
    dataStream = response.GetResponseStream ();
    // Open the stream using a StreamReader for easy access.
    StreamReader reader = new StreamReader (dataStream);
    // Read the content.
    string responseFromServer = reader.ReadToEnd ();
    // Display the content.

    result = result + responseFromServer;
    // Clean up the streams.
    reader.Close ();
    dataStream.Close ();
    response.Close();

通过上面的代码,我将byte[]发送到第二个应用程序。如何在第二个应用程序中检索发布的数据(以byte[]格式)?

2 个答案:

答案 0 :(得分:1)

注意:我假设您询问如何在第二个应用程序中检索发布的数据,并且您还可以访问第二个应用程序的代码。

然后,如果它是一个webform应用程序,那么只需在page_load事件上,您就可以获得文件名和文件本身:

string strFileName = Request.Files[0].FileName;
HttpPostedFileBase filesToSave = Request.Files[0];

如果这不是要求,请编辑您的问题并添加更多详细信息。

答案 1 :(得分:1)

编辑:更新了答案,包括请求和服务器端。服务器端将Base64字符串转换为byte[]

如果您要将读取的二进制数据发布到byte []中,则必须将其转换为请求端的Base64字符串以进行发布。

客户/请求方:

byte[] byteData = ReadSomeData();

string postData = Convert.ToBase64String(byteData);

然后在服务器端,使用HttpContext从Request属性获取InputStream。然后,您可以使用StreamReader及其ReadToEnd()方法读取数据。然后,将发布的Base64字符串转换为byte[]

这样的事情:

string postData = string.Empty;

using (StreamReader reader = new StreamReader(context.Request.InputStream))
{
    postData = inputStreamReader.ReadToEnd();
}

byte[] data = Convert.FromBase64String(postData);