gpt4 book ai didi

.net - 使用HttpClient在PostAsync之后处理对象

转载 作者:行者123 更新时间:2023-12-04 08:55:43 25 4
gpt4 key购买 nike

我正在尝试使用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 });
}

最佳答案

如果在Content对象上调用LoadIntoBufferAsync,它将把文件流复制到StreamContent对象内部的memorystream中。这样,处置HttpContent不应关闭您的FileStream。您将需要重新定位流指针并创建一个新的StreamContent进行第二次调用。

关于.net - 使用HttpClient在PostAsync之后处理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16918224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com