gpt4 book ai didi

c# - Web Api 请求抛出 "Error while copying content to a stream."

转载 作者:可可西里 更新时间:2023-11-01 09:10:49 27 4
gpt4 key购买 nike

我正在尝试实现这个 code example ,但得到一个 HttpRequestException - “将内容复制到流时出错。”当调用 ReadAsStringAsync() 方法时。内部异常是“无法访问已处置的对象”。我正在使用 Fiddler 来发出请求。我不明白。有人可以解释为什么我会收到此异常并提供解决方案吗?

网络 API 方法:

public async Task<HttpResponseMessage> Post(HttpRequestMessage request)
{
try
{
var jsonString = await request.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
throw;
}
return new HttpResponseMessage(HttpStatusCode.Created);
}

fiddler (POST):

User-Agent: Fiddler
Host: localhost:23567
Content-Length: 18
Content-Type: application/json; charset=utf-8
Body{"Test":1}

编辑:

我有线索,但需要验证。在 Web Api Controller 上,我有一个 ActionFilterAttribute 并且在其 OnActionExecuting 覆盖中,有这一行:

public override async void OnActionExecuting(HttpActionContext actionContext)
{
// omitted code
actionContext.Request.Content.ReadAsStreamAsync();
}

会不会因为Content在这里看了,所以又不能用了?如果是这样,我怎样才能使它在方法中可用?这里的Content和HttpRequestMessage一样吗? This可能包含一个答案。

最佳答案

只是一个猜测,应该作为评论发布,但我想包含一个代码片段:

也许您在 using block 中调用 Post 函数,但不要使用 await

using (HttpRequestMessage request = ...)
{
// Maybe you use this:
Post(request);

// Instead of this
var response = await Post(request);
}

或者您没有正确处理旧连接。

此外,尝试将 HttpVersion.Version10 添加到您的请求中,这会将 header 请求从 Connection: keep-alive 更改为 Connection: close,在某些情况下可能会导致异常,您重复使用主机(搜索更多信息)

request.Version = HttpVersion.Version10;
var jsonString = await request.Content.ReadAsStringAsync();

关于c# - Web Api 请求抛出 "Error while copying content to a stream.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35724514/

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