Установить данные тела запроса и файл в виде данных из нескольких частей POST-запрос в C # - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь установить данные тела запроса и FileStream в HTTP-запросе POST.Но в тело запроса добавляется только файл, ПАРАМЕТРЫ ТЕЛА не добавляются

string fileUrl=@"E:\code.txt"; 
string url = "http://ptsv2.com/t/PostReq/post";            
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

string boundaryString = "------------"+DateTime.Now.Ticks.ToString("x");

// Set the http request header \\
request.Method = WebRequestMethods.Http.Post;
request.ContentType = "multipart/form-data;boundary=" + boundaryString;
request.KeepAlive = true;
request.Credentials =CredentialCache.DefaultCredentials;

// Use a MemoryStream to form the post data request,
// so that we can get the content-length attribute.
MemoryStream postDataStream = new MemoryStream();
StreamWriter postDataWriter = new StreamWriter(postDataStream);

// Include the file in the post data

postDataWriter.Write("\r\n--" + boundaryString + "\r\n");
postDataWriter.Write("Content-Dis-data;"+ "name=\"{0}\";"+ "filename=\"{1}\""+"\r\nContent-Type: {2}\r\n\r\n", 
"myFile",
Path.GetFileName(fileUrl),
Path.GetExtension(fileUrl));

postDataWriter.Flush();

// Read the file
FileStream fileStream = new FileStream(fileUrl, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
    postDataStream.Write(buffer, 0, bytesRead);
}
fileStream.Close();

postDataWriter.Write("\r\n--" + boundaryString + "--\r\n");
postDataWriter.Flush();


// Dump the post data from the memory stream to the request stream
using (Stream stream = request.GetRequestStream())
{
    string data="username=hello&pwd=test123";
    byte[] postData = Encoding.ASCII.GetBytes(data); 
    stream.write(postData,0,postData.Length);
    postDataStream.WriteTo(stream);
}
postDataStream.Close();
WebResponse response = request.GetResponse();
StreamReader responseReader = new StreamReader(response.GetResponseStream());
string replyFromServer = responseReader.ReadToEnd();

MessageBox.Show(replyFromServer);

Каждый раз, когда я запускаю решение, на сервер загружается только файл, а не сообщениетело запроса.

Может кто-нибудь помочь мне разобраться с этой проблемой?

...