HttpClient 问题,如何重新使用不同的 URI?
HttpClient Issues, How do I re-use for different URI's?
我有一个托管在 Azure 上的简单 Web 应用程序(应用程序服务),它可以调用两个不同的外部 API。昨天我们预计流量会激增,但整个事情都崩溃了,我现在意识到这是因为我正在创建和处理 HttpClient 的新实例,如下所示:
var url = "https://www.externalapi.com/someendpoint" +
"/takethedata.js?" +
"[form]email=" + visitor.EmailAddress +
"&[form]name=" + visitor.FirstName + " " + visitor.LastName +
"&[form]zip=" + visitor.zip +
"&[form]location=" + city + ", " + state;
using(var handler = new HttpClientHandler())
{
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true;
handler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12 |
System.Security.Authentication.SslProtocols.Tls11 |
System.Security.Authentication.SslProtocols.Tls;
using(var client = new HttpClient(handler))
{
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync(url);
}
}
在同一个控制器中的另一种方法中,我正在以相同的方式制作另一个外部 API:
string AuthToken = "2678c7b5-3cvt-XXXX-XXXX-XXXXXXXXX";
string BaseUrl = "https://someotherdomain.com/dosomething/" + AuthToken;
var jsonContent = "{ \"param1\": \"" + value1 + "\", \"Timeout\":\"15\", \"Verbose\":\"True\" }";
using(var client = new HttpClient())
{
client.BaseAddress = new Uri(BaseUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.PostAsync(BaseUrl,
new StringContent(jsonContent, Encoding.UTF8, "application/json"));
if (!response.IsSuccessStatusCode)
{
return Json("Email Check Error");
}
else
{
var responseContent = await response.Content.ReadAsStringAsync();
return Json(responseContent);
}
}
我一直在阅读有关 HttpClient 并为每个外部创建单例的信息 API?以及设置不同 URI 等问题,我真的很困惑如何继续。如果我只是转储 "using" 它可能会解决吗?如果我需要创建一个单身人士,是否有任何地方可以展示我如何做到这一点并将其应用于我的场景?谢谢!
你到底想做什么?如果我理解正确,您只是想在不同的 URI 上使用相同的 HttpClient 发出另一个请求,对吗?
在这种情况下,您可以使用 HttpClient 对象调用适当的请求函数,例如(GET 请求):
HttpResponseMessage response = await client.GetAsync(url);
如果您认为每次发送请求都重新实例化它是个问题,请尝试在构造函数中初始化客户端对象,然后继续使用同一个实例?
我有一个托管在 Azure 上的简单 Web 应用程序(应用程序服务),它可以调用两个不同的外部 API。昨天我们预计流量会激增,但整个事情都崩溃了,我现在意识到这是因为我正在创建和处理 HttpClient 的新实例,如下所示:
var url = "https://www.externalapi.com/someendpoint" +
"/takethedata.js?" +
"[form]email=" + visitor.EmailAddress +
"&[form]name=" + visitor.FirstName + " " + visitor.LastName +
"&[form]zip=" + visitor.zip +
"&[form]location=" + city + ", " + state;
using(var handler = new HttpClientHandler())
{
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true;
handler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12 |
System.Security.Authentication.SslProtocols.Tls11 |
System.Security.Authentication.SslProtocols.Tls;
using(var client = new HttpClient(handler))
{
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync(url);
}
}
在同一个控制器中的另一种方法中,我正在以相同的方式制作另一个外部 API:
string AuthToken = "2678c7b5-3cvt-XXXX-XXXX-XXXXXXXXX";
string BaseUrl = "https://someotherdomain.com/dosomething/" + AuthToken;
var jsonContent = "{ \"param1\": \"" + value1 + "\", \"Timeout\":\"15\", \"Verbose\":\"True\" }";
using(var client = new HttpClient())
{
client.BaseAddress = new Uri(BaseUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.PostAsync(BaseUrl,
new StringContent(jsonContent, Encoding.UTF8, "application/json"));
if (!response.IsSuccessStatusCode)
{
return Json("Email Check Error");
}
else
{
var responseContent = await response.Content.ReadAsStringAsync();
return Json(responseContent);
}
}
我一直在阅读有关 HttpClient 并为每个外部创建单例的信息 API?以及设置不同 URI 等问题,我真的很困惑如何继续。如果我只是转储 "using" 它可能会解决吗?如果我需要创建一个单身人士,是否有任何地方可以展示我如何做到这一点并将其应用于我的场景?谢谢!
你到底想做什么?如果我理解正确,您只是想在不同的 URI 上使用相同的 HttpClient 发出另一个请求,对吗?
在这种情况下,您可以使用 HttpClient 对象调用适当的请求函数,例如(GET 请求):
HttpResponseMessage response = await client.GetAsync(url);
如果您认为每次发送请求都重新实例化它是个问题,请尝试在构造函数中初始化客户端对象,然后继续使用同一个实例?