Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 对象在与HttpClient进行后同步后被释放_.net_Asp.net Mvc 3_Dotnet Httpclient - Fatal编程技术网

.net 对象在与HttpClient进行后同步后被释放

.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()

我正试图用HttpClient发送一个文件,如果接收端出现故障,我想重新发送相同的文件流

我正在使用MultipartFormDataContent创建一个post请求,其中包含流。 当我第一次打电话给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 });
    }
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年后,我发现自己正处于这种情况。。。你还记得你到底是怎么解决的吗?