小编zar*_*har的帖子

在与HttpClient进行PostAsync之后处理对象

我正在尝试使用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(); …
Run Code Online (Sandbox Code Playgroud)

.net asp.net-mvc-3 dotnet-httpclient

7
推荐指数
1
解决办法
2467
查看次数

标签 统计

.net ×1

asp.net-mvc-3 ×1

dotnet-httpclient ×1