C# 使用IHttpclientFactory获取令牌

C# 使用IHttpclientFactory获取令牌,c#,ihttpclientfactory,C#,Ihttpclientfactory,我已经在IhttpclientFactory中编写了下面的代码。由于某些原因,代码没有返回令牌。oauth正在返回null。 如果有人能看一下并告诉我哪里出了问题,我将不胜感激。多谢各位 private async Task<OAuth>Authenticate() { //build request var request = new HttpRequestMessage(HttpMethod.Post, "/oauth/t

我已经在IhttpclientFactory中编写了下面的代码。由于某些原因,代码没有返回令牌。oauth正在返回null。 如果有人能看一下并告诉我哪里出了问题,我将不胜感激。多谢各位

    private async Task<OAuth>Authenticate()
    {
        //build request
        var request = new HttpRequestMessage(HttpMethod.Post, "/oauth/token");

        request.Content = new StringContent(JsonSerializer.Serialize(new OAuth() {grant_type="client_credentials",client_id="",client_secret=""}));

        request.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/x-www-urlencoded");
                  
        //build client
        var client = _clientFactory.CreateClient();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/+json"));

        // send the request
        var response = await client.SendAsync(request);

        OAuth oauth = null;

        if (response.IsSuccessStatusCode)
        {
            var responseStream = await response.Content.ReadAsStringAsync();
            //deserialise

            var oAuth = Newtonsoft.Json.JsonConvert.DeserializeObject<OAuth>(responseStream);
        }
        return oauth;
    }

}
private async TaskAuthenticate()
{
//构建请求
var request=newhttprequestmessage(HttpMethod.Post,“/oauth/token”);
request.Content=new-StringContent(JsonSerializer.Serialize(new-OAuth(){grant_type=“client_-credentials”,client_-id=”,client_-secret=“”}));
request.Content.Headers.ContentType=新的MediaTypeWithQualityHeaderValue(“应用程序/x-www-URLCoded”);
//构建客户端
var client=_clientFactory.CreateClient();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序”/+json”);
//发送请求
var response=wait client.sendaync(请求);
OAuth OAuth=null;
if(响应。IsSuccessStatusCode)
{
var responseStream=await response.Content.ReadAsStringAsync();
//反序列化
var oAuth=Newtonsoft.Json.JsonConvert.DeserializeObject(responseStream);
}
返回oauth;
}
}

您有两个不同的OAuth变量“OAuth”和“OAuth”。C#标识符区分大小写

应该是

    if (!response.IsSuccessStatusCode)
    {
       throw new InvalidOperationExeption($"OAuth Request Failed With Status code {response.StatusCode}");
    }
    var responseString = await response.Content.ReadAsStringAsync();
    var oAuth = Newtonsoft.Json.JsonConvert.DeserializeObject<OAuth>(responseString);
    return oAuth;
if(!response.issuccesstatuscode)
{
抛出新的InvalidOperationExeption($“OAuth请求失败,状态代码为{response.StatusCode}”);
}
var responseString=await response.Content.ReadAsStringAsync();
var oAuth=Newtonsoft.Json.JsonConvert.DeserializeObject(responseString);
返回oAuth;

响应的值是多少。IsSuccessStatusCode?client\u secret真的是空的还是只是为了保密而编辑的?您在这里犯了同样的错误…谢谢。请参阅更新的答案。感谢您的建议。但将其改为大卫的建议并不能解决问题。它仍然为OAuthSo返回空值,
responseString
看起来像什么?它是
OAuth
对象的JSON表示吗?谢谢David,您的建议确实有效