用c#调用接口的代码

/// <summary>
    /// Http客户端接口
    /// </summary>
    public interface IHttpClient
    {
        /// <summary>
        /// Post请求
        /// </summary>
        /// <typeparam name="T">请求参数类型</typeparam>
        /// <typeparam name="TResult">返回结果类型</typeparam>
        /// <param name="url">请求地址</param>
        /// <param name="value">请求参数</param>
        /// <param name="authorizationToken">验证Token</param>
        /// <param name="authorizationMethod">验证方法</param>
        /// <returns></returns>
        Task<TResult> PostAsync<T, TResult>(string url, T value, string authorizationToken = null, string authorizationMethod = "Bearer");

        /// <summary>
        /// Post请求
        /// </summary>
        /// <typeparam name="T">请求参数类型</typeparam>
        /// <param name="url">请求地址</param>
        /// <param name="value">请求参数</param>
        /// <param name="authorizationToken">验证Token</param>
        /// <param name="authorizationMethod">验证方法</param>
        /// <returns></returns>
        Task PostAsync<T>(string url, T value, string authorizationToken = null, string authorizationMethod = "Bearer");

        /// <summary>
        /// Post请求
        /// </summary>
        /// <typeparam name="TResult">返回结果类型</typeparam>
        /// <param name="url">请求地址</param>
        /// <param name="authorizationToken">验证Token</param>
        /// <param name="authorizationMethod">验证方法</param>
        /// <returns></returns>
        Task<TResult> PostAsync<TResult>(string url, string authorizationToken = null, string authorizationMethod = "Bearer");

        /// <summary>
        /// Get请求
        /// </summary>
        /// <typeparam name="TResult">返回结果类型</typeparam>
        /// <param name="url">请求地址</param>
        /// <param name="authorizationToken">验证Token</param>
        /// <param name="authorizationMethod">验证方法</param>
        /// <returns></returns>
        Task<TResult> GetAsync<TResult>(string url, string authorizationToken = null, string authorizationMethod = "Bearer");
    }
/// <summary>
    /// 简单的Http客户端
    /// </summary>
    public class StandardHttpClient : IHttpClient
    {
        private readonly HttpClient _httpClient;

        public StandardHttpClient(HttpClient httpClient)
        {
            _httpClient = httpClient;
        }

        /// <summary>
        /// 返回AjaxResponse
        /// </summary>
        /// <typeparam name="TResult">结果类型</typeparam>
        /// <param name="response">Response</param>
        /// <returns></returns>
        private static async Task<TResult> AjaxResponseResult<TResult>(HttpResponseMessage response)
        {
            if (response.IsSuccessStatusCode)
            {
                var contentString = await response.Content.ReadAsStringAsync();

                var ajaxResponse = JsonConvert.DeserializeObject<AjaxResponse<TResult>>(contentString);
                if (ajaxResponse.Success)
                {
                    return ajaxResponse.Result;
                }

                throw new Exception(ajaxResponse.Error?.Message ?? "您当前网络已断开,请网络正常后再试");
            }

            if (response.StatusCode == HttpStatusCode.BadRequest)
            {
                var contentString = await response.Content.ReadAsStringAsync();
                var ajaxResponse = JsonConvert.DeserializeObject<AjaxResponse<TResult>>(contentString);
                if (!ajaxResponse.Success)
                {
                    throw new Exception(string.Join(Environment.NewLine,
                        ajaxResponse.Error.ValidationErrors.Select(t => t.Message)));
                }

                throw new Exception("数据异常");
            }

            if (response.StatusCode == HttpStatusCode.InternalServerError)
            {
                throw new Exception("您当前网络已断开,请网络正常后再试");
            }

            if (response.StatusCode == HttpStatusCode.Unauthorized)
            {
                throw new Exception("用户未授权或者授权已经过期,请重新登录。");
            }

            throw new Exception("您当前网络已断开,请网络正常后再试");
        }

        /// <summary>
        /// Post请求
        /// </summary>
        /// <typeparam name="T">请求参数类型</typeparam>
        /// <typeparam name="TResult">返回结果类型</typeparam>
        /// <param name="url">请求地址</param>
        /// <param name="value">请求参数</param>
        /// <param name="authorizationToken">验证Token</param>
        /// <param name="authorizationMethod">验证方法</param>
        /// <returns></returns>
        public async Task<TResult> PostAsync<T, TResult>(string url, T value, string authorizationToken = null, string authorizationMethod = "Bearer")
        {
            var requestMessage = new HttpRequestMessage(HttpMethod.Post, url)
            {
                Content = new StringContent(JsonConvert.SerializeObject(value), System.Text.Encoding.UTF8,
                    "application/json")
            };
            if (authorizationToken != null)
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue(authorizationMethod, authorizationToken);
            }
            var response = await _httpClient.SendAsync(requestMessage);

            return await AjaxResponseResult<TResult>(response);
        }

        /// <summary>
        /// Post请求
        /// </summary>
        /// <typeparam name="T">请求参数类型</typeparam>
        /// <param name="url">请求地址</param>
        /// <param name="value">请求参数</param>
        /// <param name="authorizationToken">验证Token</param>
        /// <param name="authorizationMethod">验证方法</param>
        /// <returns></returns>
        public async Task PostAsync<T>(string url, T value, string authorizationToken = null, string authorizationMethod = "Bearer")
        {
            var requestMessage = new HttpRequestMessage(HttpMethod.Post, url)
            {
                Content = new StringContent(JsonConvert.SerializeObject(value), System.Text.Encoding.UTF8,
                    "application/json")
            };
            if (authorizationToken != null)
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue(authorizationMethod, authorizationToken);
            }
            var response = await _httpClient.SendAsync(requestMessage);

            await AjaxResponseResult<object>(response);
        }

        /// <summary>
        /// Post请求
        /// </summary>
        /// <typeparam name="TResult">返回结果类型</typeparam>
        /// <param name="url">请求地址</param>
        /// <param name="authorizationToken">验证Token</param>
        /// <param name="authorizationMethod">验证方法</param>
        /// <returns></returns>
        public async Task<TResult> PostAsync<TResult>(string url, string authorizationToken = null, string authorizationMethod = "Bearer")
        {
            var requestMessage = new HttpRequestMessage(HttpMethod.Post, url);
            if (authorizationToken != null)
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue(authorizationMethod, authorizationToken);
            }
            var response = await _httpClient.SendAsync(requestMessage);

            return await AjaxResponseResult<TResult>(response);
        }

        /// <summary>
        /// Get请求
        /// </summary>
        /// <typeparam name="TResult">返回结果类型</typeparam>
        /// <param name="url">请求地址</param>
        /// <param name="authorizationToken">验证Token</param>
        /// <param name="authorizationMethod">验证方法</param>
        /// <returns></returns>
        public async Task<TResult> GetAsync<TResult>(string url, string authorizationToken = null, string authorizationMethod = "Bearer")
        {
            var requestMessage = new HttpRequestMessage(HttpMethod.Get, url);

            if (authorizationToken != null)
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue(authorizationMethod, authorizationToken);
            }

            var response = await _httpClient.SendAsync(requestMessage);

            return await AjaxResponseResult<TResult>(response);
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值