簡體   English   中英

使用 Bearer Token 在 C# 中構建 post HttpClient 請求

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

我不是真正的 C# 專家,我在 C# 中有一個 httpRequest 帖子來開發,為此我創建了這個方法,它需要一個 Uri、一個 object 和一個不記名令牌。

此方法旨在構建調用請求:

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;
}

我的問題是我不確定我是否正確傳遞了我的 header 內容。 返回響應是一條錯誤消息,告訴我未通過身份驗證。

謝謝

您必須以這種方式添加令牌:

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