HttpClient postasync с пользовательским заголовком и приложением / json для тела C # - PullRequest
0 голосов
/ 22 ноября 2018

Здравствуйте, я хочу запустить push-центр приложения из api.Но я не знаю, как сделать правильный формат.

Я хочу postasync из этого API: https://appcenter.ms/api/v0.1/apps/KacangIjo/ShopDiaryApp/push/notifications

Что нужно для заголовков: X-API-Token= "{api token}" и Content Type = "application / json"

Для тела (содержимого) я хочу поставить это:

{
    "notification_content" : {
        "name" : "Campaign Name",
        "title" : "Expired Warning",
        "body" : "You have items that almost expired"
    }
}

У меня трудности с записью вправильный формат для HttpClient.Я попробовал это, но ничего не получилось

Может помочь мне с правильным форматом Serialize Json?и правильный формат заголовка и тела httpclient?Я уже нашел много образцов, но все еще не знаю, что мне нужно.Очень ценю вашу помощь, ребята:)

1 Ответ

0 голосов
/ 22 ноября 2018

Вам нужно структурировать ваши объекты так, как вам нужно JSON.

Создать классы, как показано ниже.

public class NotificationContent
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("title")]
    public string Title { get; set; }

    [JsonProperty("body")]
    public string Body { get; set; }
}

public class PostObject
{
    [JsonProperty("notification_content")]
    public NotificationContent NotificationContent { get; set; }
}

Выше приведена правильная структура, теперь, когда вы будете вызывать JsonConvert.SerializeObject Ваш JSON будет

 {
    "notification_content" : {
        "name" : "Campaign Name",
        "title" : "Expired Warning",
        "body" : "You have items that almost expired"
    }
} 

Ниже приведен код для http-вызова

using (var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) })
    {
        PostObject postObject = new PostObject
        {
            NotificationContent = new NotificationContent
            {
                Name = "Campaign Name",
                Title = "Expired Warning",
                Body = "You have items that almost expired"
            }
        };

        var myContent = JsonConvert.SerializeObject(postObject);
        client.DefaultRequestHeaders.Add("X-API-Token", "{my api token}");
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        var builder = new UriBuilder(new Uri("https://appcenter.ms/api/v0.1/apps/KacangIjo/ShopDiaryApp/push/notifications"));

        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, builder.Uri);
        request.Content = new StringContent(myContent, Encoding.UTF8, "application/json");//CONTENT-TYPE header

        HttpResponseMessage response = await client.SendAsync(request);
    };
...