J'essaye d'envoyer un fichier avec HttpClient et si quelque chose du côté de réception échoue je veux renvoyer le même flux de fichier.L'objet est éliminé après PostAsync avec HttpClient
Je crée une requête de publication avec un MultipartFormDataContent, qui contient le flux. Tout va bien quand j'appelle PostAsync pour la première fois. Mais quand j'essaye de répéter la demande j'obtiens System.ObjectDisposedException.
Mon flux de fichiers est éliminé après le premier appel de PostAsync ... Pourquoi et existe-t-il une solution à mon problème?
Voici un exemple de base de ce dont je parle.
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 });
}
Devrais-je utiliser streamContent.CopyToAsync ou simplement appeler streamContent.LoadIntoBufferAsync? – zarkobehar
La méthode avec CopyToAsync fonctionne, mais le problème est que je vais doubler l'utilisation de la mémoire pour ce flux. Je ne pense pas que le problème soit le FileStream. J'ai été obligé de passer un MemoryStream comme paramètre de contenu et il est toujours disponible. Quand j'appelle LoadIntoBufferAsync, rien ne change ... – zarkobehar