Я пытаюсь отправить файл с HttpClient, и если что-то на стороне получателя не удастся, я хочу повторно отправить тот же поток файлов.Объект размещен после PostAsync с HttpClient
Я создаю почтовый запрос с MultipartFormDataContent, который содержит поток. Все выглядит нормально, когда я впервые звоню в PostAsync. Но когда я пытаюсь повторить запрос, я получаю System.ObjectDisposedException.
Мой поток файлов расположен после первого вызова PostAsync ... Почему и есть решение моей проблемы?
Вот основной пример того, о чем я говорю.
public ActionResult Index()
{
var client = new HttpClient { BaseAddress = new Uri(Request.Url.AbsoluteUri) };
var fi = new FileInfo(@"c:\json.zip");
using (var stream = fi.OpenRead())
{
var content = new MultipartFormDataContent();
var streamContent = new StreamContent(stream);
streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
FileName = "\"File\""
};
content.Add(streamContent);
var isSuccess = client.PostAsync("Home/Put", content).
ContinueWith(x => x.Result.Content.ReadAsAsync<JsonResponse>().Result.Success).Result;
//stream is already disposed
if (!isSuccess)
{
isSuccess = client.PostAsync("Home/Put", content).
ContinueWith(x => x.Result.Content.ReadAsAsync<JsonResponse>().Result.Success).Result;
}
}
return View();
}
public JsonResult Put(HttpPostedFileBase file)
{
return Json(new JsonResponse { Success = false });
}
Должен ли я использовать streamContent.CopyToAsync, или я должен просто вызвать streamContent.LoadIntoBufferAsync? – zarkobehar
Метод с CopyToAsync работает, но проблема в том, что я удвою использование памяти для этого потока. Я не думаю, что проблема в FileStream. Я попытался передать параметр MemoryStream в качестве параметра содержимого, и он все еще существует. Когда я вызываю LoadIntoBufferAsync, ничего не меняется ... – zarkobehar