gpt4 book ai didi

c# - 如何传递 HttpInputStream 的内容并将其发送到 c# .net 中的另一个 Rest Api

转载 作者:可可西里 更新时间:2023-11-01 16:20:12 33 4
gpt4 key购买 nike

我有一个 REST API Web 服务,它充当中间件,将调用重定向到另一个 REST API 服务。

例如,在这种情况下,我在网页上上传了一个文件。这个 Web 服务接收文件并将它们发送到另一个实际处理文件的 API。

是这样的:

public async Task<IHttpActionResult> ExecuteFileUpload()
{
IHttpActionResult res;
try
{
var httpRequest = HttpContext.Current.Request;
var requestedFiles = new List<System.IO.Stream>();
var url = "http://localhost:2288" + "/api/v1/templates/upload";
if (httpRequest.Files.Count > 0)
{
HttpFileCollection files = httpRequest.Files;
using (var content = new MultipartFormDataContent())
{
int index = 0;
foreach (var file in httpRequest.Files)
{
var postedFile = httpRequest.Files[index];
var fileName = postedFile.FileName;
var fileInMemory = postedFile.InputStream;
content.Add(new StreamContent(fileInMemory), "f" + index, fileName);
index++;
}
res = await ForwardPost(url, content);
}
}
else
res = BadRequest();
}
catch (Exception ex)
{
res = InternalServerError(ex);
}
return res;
}

forward post 函数很简单,就是这样:

protected async Task<IHttpActionResult> ForwardPost(string url, MultipartFormDataContent forwardContent)
{
IHttpActionResult res;
using (var client = CreateClient())
{
using (var response = await client.PostAsync(url, forwardContent))
{
if (response.StatusCode == HttpStatusCode.OK)
{
var content = await response.Content.ReadAsAsync<JToken>();
res = Ok(content);
}
else
{
res = InternalServerError();
}
}

return res;
}
}

如您所见,我只想转发从网页传递给我的任何内容,并将其转发给处理此问题的实际 REST API。

但是它在这一行抛出异常:

response = await client.PostAsync(url, forwardContent)

它抛出 System.IO.IOException

Cannot close stream until all bytes are written.

为什么会这样?有没有办法解决这个问题?

最佳答案

ForwardPost 函数中的 using 将从调用方法中处理 forwardedContent。此处置将尝试处置来自原始方法的请求对象的“postedFile.InputStream”引用。这可能与 httprequest 对象紧密相关。

using (var response = await client.PostAsync(url, forwardContent))

解决方案是将 postedFile.InputStream 复制到新的内存流中,以便单独处理。

关于c# - 如何传递 HttpInputStream 的内容并将其发送到 c# .net 中的另一个 Rest Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54698531/

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