public async Task <Richmenu> CreateRichMenuWithImageAsync(RichmenuDetail richmenuDetail, string imgUrl,
                                                                  string alias = "")
        {
            using var createRequest = new HttpRequestMessage(new HttpMethod("POST"), LineMessageRichMenuApiBaseUrl);
            createRequest.Headers.TryAddWithoutValidation("Authorization", $"Bearer {_accessToken}");

            var postJson = JsonConvert.SerializeObject(richmenuDetail, new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                ContractResolver  = new DefaultContractResolver
                {
                    NamingStrategy = new CamelCaseNamingStrategy()
                }
            });

            createRequest.Content = new StringContent(postJson);
            createRequest.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
            var createResponse = await _httpClient.SendAsync(createRequest);

            var createContent = await createResponse.Content.ReadAsStringAsync();

            if (createResponse.StatusCode != HttpStatusCode.OK)
            {
                throw new Exception(createContent);
            }

            var richmenuRes = JsonConvert.DeserializeObject <Richmenu>(createContent);

            using var uploadRequest = new HttpRequestMessage(new HttpMethod("POST"),
                                                             $"{LineMessageRichMenuAttachApiBaseUrl}/{richmenuRes.richMenuId}/content");
            uploadRequest.Headers.TryAddWithoutValidation("Authorization", $"Bearer {_accessToken}");
            var imgBytes = GetImage(imgUrl);

            uploadRequest.Content = new ByteArrayContent(imgBytes);
            uploadRequest.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
            var uploadResponse = await _httpClient.SendAsync(uploadRequest);

            var uploadContent = await uploadResponse.Content.ReadAsStringAsync();

            if (uploadResponse.StatusCode != HttpStatusCode.OK)
            {
                await DeleteRichMenu(richmenuRes.richMenuId);

                throw new Exception(uploadContent);
            }

            if (!string.IsNullOrEmpty(alias))
            {
                await CreateRichMenuAliasAsync(richmenuRes.richMenuId, alias);
            }

            return(richmenuRes);
        }
        private async Task <Richmenu> CreateRichMenuAsync(RichmenuDetail richmenuDetail)
        {
            using var request = new HttpRequestMessage(new HttpMethod("POST"), LineMessageRichMenuApiBaseUrl);
            request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {_accessToken}");

            var postJson = JsonConvert.SerializeObject(richmenuDetail, new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                ContractResolver  = new DefaultContractResolver
                {
                    NamingStrategy = new CamelCaseNamingStrategy()
                }
            });

            request.Content = new StringContent(postJson);
            request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
            var response = await _httpClient.SendAsync(request);

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

            var richmenuRes = JsonConvert.DeserializeObject <Richmenu>(results);

            return(richmenuRes);
        }
Пример #3
0
        public async Task <IActionResult> CreateRichMemu([FromBody] RichmenuDetail richMenu, string imageUrl)
        {
            var result = await _lineMessageUtility.CreateRichMenuWithImageAsync(richMenu, imageUrl);

            return(Ok(result));
        }