Sto tentando di inviare un file con HttpClient e se qualcosa sul lato ricezione fallisce, voglio reinviare lo stesso flusso di file.L'oggetto viene eliminato dopo PostAsync con HttpClient
Sto creando una richiesta di post con un MultipartFormDataContent, che contiene lo stream. Tutto sembra a posto quando chiamo PostAsync per la prima volta. Ma quando provo a ripetere la richiesta ottengo System.ObjectDisposedException.
Il mio flusso di file viene eliminato dopo la prima chiamata di PostAsync ... Perché e c'è una soluzione al mio problema?
Ecco un esempio di base di cosa sto parlando.
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 });
}
Devo utilizzare streamContent.CopyToAsync o dovrei semplicemente chiamare streamContent.LoadIntoBufferAsync? – zarkobehar
Il metodo con CopyToAsync funziona, ma il problema è che raddoppierò l'utilizzo della memoria per questo flusso. Non penso che il problema sia il FileStream. Ho cercato di passare un MemoryStream come parametro del contenuto ed è ancora disponibile. Quando chiamo LoadIntoBufferAsync nulla cambia ... – zarkobehar