Получите ответ от FatSecret Api 2.0 c # - PullRequest
0 голосов
/ 12 июня 2019

Мне удалось получить токен через это руководство: 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; }
}

Я хотел бы перейти к строке responseRequest String в строке Json.

Внизу этой страницы есть руководство по этому шагу, и я попытался написать его на c #, но неверно.

Заранее спасибо!

1 Ответ

0 голосов
/ 12 июня 2019

Вам не нужно кодировать base64 свой токен Bearer - он используется только для маскировки базовой аутентификации. Вы можете использовать строку как есть.

http.DefaultRequestHeaders.Authorization =
        new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", data.access_token);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...