.net 对象在与HttpClient进行后同步后被释放
我正试图用HttpClient发送一个文件,如果接收端出现故障,我想重新发送相同的文件流 我正在使用MultipartFormDataContent创建一个post请求,其中包含流。 当我第一次打电话给PostAsync时,一切看起来都很好。但当我尝试重复请求时,我得到System.ObjectDisposedException 我的文件流在第一次调用PostAsync后被释放。。。为什么,我的问题有解决办法吗 这是我所说的基本例子.net 对象在与HttpClient进行后同步后被释放,.net,asp.net-mvc-3,dotnet-httpclient,.net,Asp.net Mvc 3,Dotnet Httpclient,我正试图用HttpClient发送一个文件,如果接收端出现故障,我想重新发送相同的文件流 我正在使用MultipartFormDataContent创建一个post请求,其中包含流。 当我第一次打电话给PostAsync时,一切看起来都很好。但当我尝试重复请求时,我得到System.ObjectDisposedException 我的文件流在第一次调用PostAsync后被释放。。。为什么,我的问题有解决办法吗 这是我所说的基本例子 public ActionResult Index()
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 });
}
public ActionResult Index()
{
var client=newhttpclient{BaseAddress=newuri(Request.Url.AbsoluteUri)};
var fi=newfileinfo(@“c:\json.zip”);
使用(var stream=fi.OpenRead())
{
var content=新的MultipartFormDataContent();
var streamContent=新的streamContent(流);
streamContent.Headers.ContentType=新的MediaTypeHeaderValue(“应用程序/八位字节流”);
streamContent.Headers.ContentDisposition=新的ContentDispositionHeaderValue(“表单数据”)
{
FileName=“\”文件“”
};
content.Add(streamContent);
var issucess=client.PostAsync(“主/放”,内容)。
ContinueWith(x=>x.Result.Content.ReadAsAsync().Result.Success).Result;
//流已被释放
如果(!isSuccess)
{
issucess=client.PostAsync(“主/放”,内容)。
ContinueWith(x=>x.Result.Content.ReadAsAsync().Result.Success).Result;
}
}
返回视图();
}
公共JsonResult Put(HttpPostedFileBase文件)
{
返回Json(新的JsonResponse{Success=false});
}
如果在内容对象上调用LoadIntoBufferAsync,它会将文件流复制到StreamContent对象内的memorystream中。这样,处理HttpContent不应关闭您的文件流。您需要重新定位流指针并创建新的StreamContent来进行第二次调用。我应该使用StreamContent.CopyToAsync还是只调用StreamContent.LoadIntoBufferAsync?CopyToAsync的方法可以工作,但问题是我会将此流的内存使用量增加一倍。我认为问题不在于文件流。我尝试将MemoryStream作为内容参数传递,但它仍然是disposes。当我调用LoadIntoBufferAsync时,一切都没有改变……7年后,我发现自己正处于这种情况。。。你还记得你到底是怎么解决的吗?