C# 为什么第二个HttpClient.PostAsync返回500?

C# 为什么第二个HttpClient.PostAsync返回500?,c#,asp.net-core,C#,Asp.net Core,在下面的代码中,我在第一次请求中收到200,之后收到500。我是.Net Core C#新手,因此我学会了只分配一次特定的HttpClient属性,即超时 然而,我的自动测试第一次成功,但之后500次成功。我正在使用HttpClientFactory if (httpClient.Timeout == null) { httpClient.Timeout = TimeSpan.FromSeconds(Foo.timeout); } if (httpClient.BaseAddress

在下面的代码中,我在第一次请求中收到200,之后收到500。我是
.Net Core C#
新手,因此我学会了只分配一次特定的HttpClient属性,即超时

然而,我的自动测试第一次成功,但之后500次成功。我正在使用HttpClientFactory

if (httpClient.Timeout == null)
{
    httpClient.Timeout = TimeSpan.FromSeconds(Foo.timeout);
}

if (httpClient.BaseAddress == null) {
     httpClient.BaseAddress = new Uri(Foo.url);
}
response = await httpClient.PostAsync("", content);

我发现代码有问题。我应该为每个Http请求使用HttpClientFactory创建HttpClient的新实例:

_httpClient = _httpClientFactory.CreateClient(command.ClientId);
公共类Foo
{
私有只读IHttpClientFactory\U httpClientFactory;
公共Foo(IHttpClientFactory httpClientFactory)
{
_httpClientFactory=httpClientFactory;
}
公共异步任务栏()
{
var httpClient=_httpClientFactory.CreateClient(“Foo”);
使用var response=wait-httpClient.PostAsync(“example.com”,new-StringContent(“Foo”);
返回response.RequestMessage;
//这里不再引用_httpclient,垃圾
//收集器将进行清洁
//启动_httpclient并释放该实例
//叫一个新的
//已创建_httpclient的实例
}
}

HTTP 500表示服务器端错误。这不是您的代码,而是服务器端代码中的错误。如果是客户端错误,您会得到HTTP 400-499状态代码。顺便说一句,服务器端错误可能是由服务器无法处理的错误请求引起的。无论如何,这不是HttpClient的一个附带问题。@为什么伪代码在这里被提升?它如何帮助其他成员解决他们的问题?@aepot发布的代码根本不是psuedocode。你在说什么?
public-httpresponse-Bar()
你发布的代码根本不会编译。@aepot发布的代码是在Visual Studio 2019和Linqpad 6.1中编译的有效C#8.0。
public-httpresponse-Bar()
中的
httpresponse是什么?2) 
返回响应
将立即导致返回
响应的
.Dispose()
使用
语句)。因此,您将返回一个已处理的对象。3)
收集器将清理
将不编译4)
调用新的
将不编译。-这是不可编译的伪代码。
public class Foo
    {
        private readonly IHttpClientFactory _httpClientFactory;
        public Foo(IHttpClientFactory httpClientFactory)
        {
            _httpClientFactory = httpClientFactory;
        }
        public async Task<HttpRequestMessage> Bar()
        {
            var httpClient = _httpClientFactory.CreateClient("Foo");
            using var response = await httpClient.PostAsync("example.com", new StringContent("Foo"));
            return response.RequestMessage;
            // here as there is no more reference to the _httpclient, the garbage 
            //collector will clean
            // up the _httpclient and release that instance. Next time the method is 
            //called a new
            // instance of the _httpclient is created
        }

    }