WebApiInvoker

using System.Data;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Threading;
using System.Web.Http;
using Newtonsoft.Json;
using OAuthPractice.ProtectedApi;

namespace OAuthPractice.Tests
{
    public class WebApiInvoker
    {
        private readonly string _apiBaseAddress;

        public WebApiInvoker(string apiBaseAddress)
        {
            _apiBaseAddress = apiBaseAddress;
        }

        public TResult InvokeGetRequest<TResult>(string api)
        {
            using (var invoker = CreateMessageInvoker())
            {
                using (var cts = new CancellationTokenSource())
                {
                    var request = new HttpRequestMessage(HttpMethod.Get, _apiBaseAddress + api);
                    using (HttpResponseMessage response = invoker.SendAsync(request, cts.Token).Result)
                    {
                        if (response.IsSuccessStatusCode)
                        {
                            var result = response.Content.ReadAsStringAsync().Result;
                            return JsonConvert.DeserializeObject<TResult>(result);
                        }
                        throw new HttpResponseException(response);
                    }
                }
            }
        }

        public TResult InvokePostRequest<TResult, TArguemnt>(string api, TArguemnt arg)
        {
            var invoker = CreateMessageInvoker();
            using (var cts = new CancellationTokenSource())
            {
                var request = new HttpRequestMessage(HttpMethod.Post, _apiBaseAddress + api);
                request.Content = new ObjectContent<TArguemnt>(arg, new JsonMediaTypeFormatter());
                using (HttpResponseMessage response = invoker.SendAsync(request, cts.Token).Result)
                {
                    if (response.IsSuccessStatusCode)
                    {
                        var result = response.Content.ReadAsStringAsync().Result;
                        return JsonConvert.DeserializeObject<TResult>(result);  
                    }
                    throw new HttpResponseException(response);
                }
            }
        }

        private HttpMessageInvoker CreateMessageInvoker()
        {
            var config = new HttpConfiguration();
            WebApiConfig.Register(config);
            var server = new HttpServer(config);
            var messageInvoker = new HttpMessageInvoker(server);
            return messageInvoker;
        }
    }
}

  使用方法:

var user=new UserModel(){UserName = "richie2",Password = "Password2",ConfirmPassword = "Password2"};

            var result = ApiInvoker.InvokePostRequest<IHttpActionResult, UserModel>("account/register", user);
			result.Should().Should().Equals("ok");

  

转载于:https://www.cnblogs.com/hbsfgl/p/5288024.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值