Я пытаюсь загрузить файл с помощью HTTP Post, но каким-то образом нет файла, который будет найден при обработке запроса на стороне сервера. Я смог создать аналогичный запрос и успешно загрузить файл с помощью расширения Postman для Chrome, но так или иначе не может сделать то же самое программно.Не удается загрузить файл с помощью HTTP POST
код клиента:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fullUrl);
request.Method = "POST";
using (Stream requestStream = request.GetRequestStream())
{
string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
byte[] trailer = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type:{2}\r\n\r\n";
string header = string.Format(headerTemplate, "Files", "myFile.xml", "text/xml");
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
requestStream.Write(boundarybytes, 0, boundarybytes.Length);
requestStream.Write(headerbytes, 0, headerbytes.Length);
requestStream.Write(uploadedFile, 0, uploadedFile.Length);
requestStream.Write(trailer, 0, trailer.Length);
}
Запрос выглядит следующим образом (в Fiddler):
POST https://host/myUrl
Content-Length: 1067
Expect: 100-continue
Connection: Keep-Alive
------------8d2942f79ab208e
Content-Disposition: form-data; name="Files"; filename="myFile.xml"
Content-Type:text/xml
<myFile>
Something
</myFile>
------------8d2942f79ab208e
стороне сервера:
var httpRequest = HttpContext.Current.Request;
if (httpRequest.Files.Count != 1)
return BadRequest("Didn't get the file.");
Но я всегда получаю httpRequest.Files.Count
равным нулю. Зачем?
Следующий запрос (созданный с использованием почтового менеджера) дает мне httpRequest.Files.Count
как единое целое, как и ожидалось.
POST myUrl HTTP/1.1
Host: host
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="Files"; filename="myFile.xml"
Content-Type: text/xml
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Что я делаю неправильно?
Пробовал это, но это не помогло. – NGambit
, возможно, посмотрите на [WebClient.UploadFile] (https://msdn.microsoft.com/library/36s52zhs (v = vs.110) .aspx) и посмотрите, будет ли он работать с вашим требованием –