简体   繁体   English

使用 Bearer Token 在 C# 中构建 post HttpClient 请求

[英]Building post HttpClient request in C# with Bearer Token

I'm not really a C# expert and I have a post httpRequest in C# to develop and for this I created this method that takes a Uri, an object and a bearer token.我不是真正的 C# 专家,我在 C# 中有一个 httpRequest 帖子来开发,为此我创建了这个方法,它需要一个 Uri、一个 object 和一个不记名令牌。

This method aims to build the calling request:此方法旨在构建调用请求:

private HttpClient client = new HttpClient(); 
public async Task<UserResponse> CreateUser(Uri url, UserRequest userRequest, string token)
{
        
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");


    string requestObject = JsonConvert.SerializeObject(userRequest);
    Console.WriteLine("My Object: " + requestObject);
    var req = new HttpRequestMessage(HttpMethod.Post, url);
    req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
    req.Content = new StringContent(
        requestObject,
        Encoding.UTF8,
        "application/json"
    );

    Console.WriteLine(req.ToString());
    var response = await client.SendAsync(req); 
        
    string output = await response.Content.ReadAsStringAsync();
    Console.WriteLine(JsonConvert.DeserializeObject(output));

    UserResponse returnValue = JsonConvert.DeserializeObject<UserResponse>(output);
    return returnValue;
}

My issue is that i'm not sure I'm passing correctly my header content.我的问题是我不确定我是否正确传递了我的 header 内容。 The return response is an error message telling I'm not authenticated.返回响应是一条错误消息,告诉我未通过身份验证。

Thanks谢谢

you have to add token this way:您必须以这种方式添加令牌:

var baseAddress = "http://....";
var api = ".....";
client.BaseAddress = new Uri(baseAddress);

var contentType = new MediaTypeWithQualityHeaderValue("application/json");

client.DefaultRequestHeaders.Accept.Add(contentType);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

var postData = JsonConvert.SerializeObject(userRequest);
contentData = new StringContent(postData, Encoding.UTF8, "application/json");

var response = await client.PostAsync(baseUrl + api, contentData);

if (response.IsSuccessStatusCode)
{
var stringData = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<UserResponse>(stringData);
}
else
{
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM