using Microsoft.Extensions.Configuration; using MP.SPEC.Data; using NLog; using System.Text.Json; namespace MP.SPEC.Services { /// /// Classe per chiamare metodi da MP-IO /// /// rif: https://www.ezzylearning.net/tutorial/making-http-requests-in-blazor-server-apps https://wellsb.com/csharp/aspnet/blazor-httpclientfactory-and-web-api/ /// public class IOApiService { #region Public Constructors public IOApiService(IHttpClientFactory clientFactory, IConfiguration configuration, ILogger logger) { _logger = logger; _logger.LogInformation("Starting IOApiService INIT"); _configuration = configuration; _clientFactory = clientFactory; // conf url x chiamate REST MpIoBaseUrl = _configuration.GetValue("ServerConf:MpIoBaseUrl"); } #endregion Public Constructors #region Public Methods /// /// Chiama metodo x registrare esecuzione task da IOB /// /// /// public async Task addTask2Exe(string idxMacc, string taskName, string taskVal) { // compongo URL e chiamo string restUrl = $"IOB/addTask2Exe/{idxMacc}?taskName={taskName}&taskVal={taskVal}"; try { var response = await callMpIoUrlGet(restUrl); } catch (Exception exc) { Log.Error($"Errore durante chiamata addTask2Exe:{Environment.NewLine}{exc}"); } } /// /// Chiama metodo x chiedere sync DB /// /// /// public async Task callSyncDb(string IdxMacc) { // chiamo aggiunta task SyncDb... await addTask2Exe(IdxMacc, "syncDbData", ""); } /// /// Effettua chiamata ad MP-IO /// /// URL metodo relativo alla base path di MP-IO /// public async Task callMpIoUrlGet(string relUrl) { string result = ""; var request = new HttpRequestMessage(HttpMethod.Get, $"{MpIoBaseUrl}{relUrl}"); request.Headers.Add("Accept", "application/vnd.github.v3+json"); var client = _clientFactory.CreateClient(); Log.Info($"Richiesta call per {MpIoBaseUrl}{relUrl}"); var response = await client.SendAsync(request); if (response.IsSuccessStatusCode) { var stringResponse = await response.Content.ReadAsStringAsync(); result = stringResponse; Log.Info($"Effettuata coin successo call per {MpIoBaseUrl}{relUrl}"); } else { result = "NO"; Log.Error($"Errore in chaimata | code {response.StatusCode} | {response.Content}"); } return result; } #endregion Public Methods #region Private Fields private static IConfiguration _configuration = null!; private static ILogger _logger = null!; private static Logger Log = LogManager.GetCurrentClassLogger(); private static string MpIoBaseUrl = ""; private readonly IHttpClientFactory _clientFactory; #endregion Private Fields } }