| | |
| | | using Microsoft.EntityFrameworkCore; |
| | | using Microsoft.Extensions.Caching.Distributed; |
| | | using RabbitMQ.Client; |
| | | using RTools_NTS.Util; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel.Design; |
| | |
| | | { |
| | | public static class ResourceHttpUtils |
| | | { |
| | | public static async Task<string> SendHttpAsync(this object request, string serviceName, string route, EnumResourceMethod method, EnumResourceHttpProvider? provider = null) |
| | | /// <summary> |
| | | /// 发送请求 |
| | | /// </summary> |
| | | /// <param name="request">请求参数</param> |
| | | /// <param name="serviceName">服务名称</param> |
| | | /// <param name="route">路由</param> |
| | | /// <param name="method">请求方式</param> |
| | | /// <param name="provider">资源提供者</param> |
| | | /// <param name="accessToken">访问令牌</param> |
| | | /// <param name="refreshToken">刷新令牌</param> |
| | | /// <returns></returns> |
| | | public static async Task<string> SendHttpAsync( |
| | | this object request, |
| | | string serviceName, |
| | | string route, |
| | | EnumResourceMethod method, |
| | | EnumResourceHttpProvider? provider = null, |
| | | string accessToken = null, |
| | | string refreshToken = null) |
| | | { |
| | | serviceName = App.GetConfig<string>($"{serviceName}:ServiceName"); |
| | | var url = await GetUrl(serviceName, route); |
| | | var builder = HttpRequestBuilder.Create(method.GetMethod(), url); |
| | | var builder = HttpRequestBuilder.Create(method.GetHttpMethod(), url); |
| | | |
| | | if (method == EnumResourceMethod.Get) |
| | | builder = builder.WithQueryParameters(request); |
| | | else |
| | | builder = builder.SetJsonContent(request); |
| | | |
| | | if (accessToken.IsNotNull()) |
| | | { |
| | | builder = builder.WithHeader("Authorization", accessToken); |
| | | } |
| | | if (refreshToken.IsNotNull()) |
| | | { |
| | | builder = builder.WithHeader("X-Authorization", refreshToken); |
| | | } |
| | | |
| | | IResourceHttpProvider httpProvider = |
| | | provider == EnumResourceHttpProvider.SystemUser |
| | | ? new SystemUserResourceHttpProvider() |
| | |
| | | return response; |
| | | } |
| | | |
| | | public static async Task<TResponse> SendHttpAsync<TRequest, TResponse>(this TRequest request, EnumResourceHttpProvider? provider = null) |
| | | /// <summary> |
| | | /// 发送请求 |
| | | /// </summary> |
| | | /// <typeparam name="TRequest"></typeparam> |
| | | /// <typeparam name="TResponse"></typeparam> |
| | | /// <param name="request"></param> |
| | | /// <param name="provider"></param> |
| | | /// <returns></returns> |
| | | public static async Task<TResponse> SendHttpAsync<TRequest, TResponse>( |
| | | this TRequest request, |
| | | EnumResourceHttpProvider? provider = null) |
| | | { |
| | | var requestType = typeof(TRequest); |
| | | var resourceAttribute = requestType.GetCustomAttribute<ResourceAttribute>(); |
| | |
| | | return response; |
| | | } |
| | | |
| | | public static HttpMethod GetMethod(this EnumResourceMethod method) |
| | | /// <summary> |
| | | /// 获取请求方式 |
| | | /// </summary> |
| | | /// <param name="method"></param> |
| | | /// <returns></returns> |
| | | public static HttpMethod GetHttpMethod(this EnumResourceMethod method) |
| | | { |
| | | switch (method) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取健康服务地址 |
| | | /// </summary> |
| | | /// <param name="serviceName"></param> |
| | | /// <param name="route"></param> |
| | | /// <returns></returns> |
| | | public static async Task<string> GetUrl(string serviceName, string route) |
| | | { |
| | | var domain = await GetHealthyServiceDomain(serviceName); |