通过 FatSecret API 2.0 C# 获取响应

问题描述 投票:0回答:1

我设法通过本指南获取令牌:https://platform.fatsecret.com/api/Default.aspx?screen=rapiauth2,但我无法正确获得响应。我的代码哪里出错了?

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }

    private async void BtnFoodApi_Click(object sender, RoutedEventArgs e)
    {
        // --- Get Token --

        HttpClient client = new HttpClient();
        var byteArray = Encoding.ASCII.GetBytes("9276456b47524b479cbdaf7cf5792bbf:0366d2fc646e4b6f89bf11bddbaec6a4");
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

        var values = new Dictionary<string, string>
        {
           { "scope", "basic" },
           { "grant_type", "client_credentials" }
        };
        var content = new FormUrlEncodedContent(values);
        var response = await client.PostAsync("https://oauth.fatsecret.com/connect/token", content);

        var responseString = await response.Content.ReadAsStringAsync();

        var serializer = new DataContractJsonSerializer(typeof(RootObject));

        var ms = new MemoryStream(Encoding.UTF8.GetBytes(responseString));
        var data = (RootObject)serializer.ReadObject(ms);


        // --- Get responce --

        var http = new HttpClient();

        http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", data.access_token);

        var valuesRequest = new Dictionary<string, string>
        {
           { "application", "json" },
        };

        var contentRequest = new FormUrlEncodedContent(valuesRequest);

        var responseRequest = await http.PostAsync("https://platform.fatsecret.com/rest/server.api", contentRequest);
        
        //Parameters: method=foods.search&search_expression=toast&format=json // How can I call Api 2.0 with these parameters?

        //var responseRequestString = await responseRequest.Content.ReadAsStringAsync();
    }
}

[DataContract]
public class RootObject
{
    [DataMember]
    public string access_token { get; set; }

    [DataMember]
    public int expires_in { get; set; }

    [DataMember]
    public string token_type { get; set; }
}

我想获取 JSON 字符串中的

responseRequest
String 字符串。

本页的底部有关于此步骤的指南,我尝试用 C# 编写它,但错误。

c# dotnet-httpclient
1个回答
0
投票

您不需要对您的承载令牌进行 Base64 编码 - 这仅用于混淆基本身份验证。您可以按原样使用字符串。

http.DefaultRequestHeaders.Authorization =
        new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", data.access_token);
© www.soinside.com 2019 - 2024. All rights reserved.