using Newtonsoft.Json; using System.Net.Http; using System.Text; using System; using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.Configuration; namespace AccountManagement.Domain.InternalApiCaller; public class ApiResult { public bool Success { get; set; } public T Result { get; set; } public string Error { get; set; } } public static class InternalApiCaller { private static string _baseUrl = ""; public static void SetBaseUrl(string baseUrl) { _baseUrl = baseUrl.TrimEnd('/'); // حذف / اضافی } /// ///api post متد /// /// /// /// /// /// /// public static ApiResult PostAsync( string url, string internalKey, TRequest body ) { try { var client = new HttpClient(); // ساخت URL نهایی var finalUrl = $"{_baseUrl}/{url.TrimStart('/')}"; var request = new HttpRequestMessage(HttpMethod.Post, finalUrl); request.Headers.Add("X-INTERNAL-KEY", internalKey); var json = JsonConvert.SerializeObject(body); request.Content = new StringContent(json, Encoding.UTF8, "application/json"); var response = client.SendAsync(request).GetAwaiter().GetResult(); if (!response.IsSuccessStatusCode) { return new ApiResult { Success = false, Error = $"HTTP Error: {response.StatusCode}" }; } var text = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); var deserialized = JsonConvert.DeserializeObject(text); return new ApiResult { Success = true, Result = deserialized }; } catch (Exception ex) { return new ApiResult { Success = false, Error = ex.Message }; } } /// /// Api Get متد /// /// /// /// /// /// public static ApiResult GetAsync( string url, string internalKey, Dictionary parameters = null ) { try { if (parameters != null && parameters.Any()) { var query = string.Join("&", parameters .Where(p => p.Value != null) .Select(p => $"{p.Key}={p.Value}") ); url += url.Contains("?") ? "&" + query : "?" + query; } // ساخت URL نهایی var finalUrl = $"{_baseUrl}/{url.TrimStart('/')}"; var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Get, finalUrl); request.Headers.Add("X-INTERNAL-KEY", internalKey); var response = client.SendAsync(request).GetAwaiter().GetResult(); if (!response.IsSuccessStatusCode) { return new ApiResult { Success = false, Error = $"HTTP Error: {response.StatusCode}" }; } var text = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); var deserialized = JsonConvert.DeserializeObject(text); return new ApiResult { Success = true, Result = deserialized }; } catch (Exception ex) { return new ApiResult { Success = false, Error = ex.Message }; } } }