如何解决HttpClient SendAsync错误-ResponseStatusCode不表示成功
我不熟悉使用C#编写通用方法,并且试图在我的c#项目中创建通用SendAsync
方法。代码如下。
HttpClientHelper.cs
public static async Task<TOut> ExecuteRequest<TIn,TOut>(TIn request,string url)
{
Uri requestUri = new Uri(url);
string payload = JsonConvert.SerializeObject(request);
HttpContent httpContent = new StringContent(payload,Encoding.UTF8,"application/json");
HttpRequestMessage requestMessage = new HttpRequestMessage
{
Method = HttpMethod.Post,RequestUri = requestUri,Content = httpContent
};
return await SendUriAsync<TOut>(requestMessage);
}
public static async Task<T> SendUriAsync<T>(HttpRequestMessage requestMessage)
{
CancellationTokenSource source = new CancellationSource();
CancellationToken token = source.Token;
string client_id = "1234";
using (var client = new HttpClient())
{
var clientCred = Encoding.UTF8.GetBytes($"{client_id}");
client.DefaultRequestHeaders.Add("Authorization","Basic "+Convert.ToBase64String(clientCred));
using(var result = await client.SendAsync(requestMessage,token))
{
result.EnsureSuccessstatusCode();
var response = await result.Content.ReadAsstringAsync();
if(result.IsSuccessstatusCode && response != null)
{
return JsonConvert.DeserializeObject<T>(response);
}
else
{
throw new ApiException{ status = (int)result.StatusCode};
}
}
}
}
CarSalesController.cs
string thirdpartyUrl = "someurl";
var responSEObject = await HttpClientHelper.ExecuteRequest<CarObject,string>(requestObject,thirdpartyUrl);
ResponseStatusCode不指示成功。状态码:401-未经授权
但是当我使用邮递员时,相同的API效果很好。这是cURL
curl --location --request GET'someurl'
--header'client_id:1234'
--header'授权:基本asdf'
--header'Content-Type:application / json'
--data-raw'{
“ data1”:“ somedata1”,
“ data2”:“ somedata2”
}'
我的代码有什么问题?
解决方法
尝试
request.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
$"{client_id}")));
,
您需要使用
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic",Convert.ToBase64String(byteArray));
代替
client.DefaultRequestHeaders.Add("Authorization","Basic "+Convert.ToBase64String(clientCred));
例如:
static async void HTTP_GET()
{
var TARGETURL = "http://en.wikipedia.org/";
HttpClientHandler handler = new HttpClientHandler()
{
Proxy = new WebProxy("http://127.0.0.1:8888"),UseProxy = true,};
Console.WriteLine("GET: + " + TARGETURL);
// ... Use HttpClient.
HttpClient client = new HttpClient(handler);
var byteArray = Encoding.ASCII.GetBytes("username:password1234");
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic",Convert.ToBase64String(byteArray));
HttpResponseMessage response = await client.GetAsync(TARGETURL);
HttpContent content = response.Content;
// ... Check Status Code
Console.WriteLine("Response StatusCode: " + (int)response.StatusCode);
// ... Read the string.
string result = await content.ReadAsStringAsync();
// ... Display the result.
if (result != null &&
result.Length >= 50)
{
Console.WriteLine(result.Substring(0,50) + "...");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。