6
我想用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