Tôi đang cố gắng gửi một tệp với HttpClient và nếu một cái gì đó ở phía bên nhận không thành công, tôi muốn gửi lại cùng một luồng tệp.Đối tượng được xử lý sau khi PostAsync với HttpClient
Tôi đang tạo yêu cầu đăng bài với một MultipartFormDataContent, chứa luồng. Mọi thứ đều ổn khi tôi gọi PostAsync lần đầu tiên. Nhưng khi tôi cố gắng lặp lại yêu cầu, tôi nhận được System.ObjectDisposedException.
Luồng tệp của tôi được xử lý sau cuộc gọi đầu tiên của PostAsync ... Tại sao và có giải pháp cho vấn đề của tôi?
Đây là ví dụ cơ bản về những gì tôi đang nói đến.
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 });
}
Tôi có nên sử dụng streamContent.CopyToAsync hoặc tôi chỉ nên gọi streamContent.LoadIntoBufferAsync? – zarkobehar
Phương thức với CopyToAsync hoạt động, nhưng vấn đề là tôi sẽ tăng gấp đôi mức sử dụng bộ nhớ cho luồng này. Tôi không nghĩ rằng vấn đề là FileStream. Tôi đã cố gắng vượt qua MemoryStream như một tham số nội dung và nó vẫn được xử lý. Khi tôi gọi LoadIntoBufferAsync không có gì thay đổi ... – zarkobehar