zoukankan      html  css  js  c++  java
  • 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");
    

      

  • 相关阅读:
    系统集群安装
    用ASP.net判断上传文件类型的三种方法
    C#中利用JQuery实现视频网站
    云计算和大数据
    c# Dictionary 中Keys.ToArray<>方法的细节测试
    DateTime compare
    Dictionary的遍历和修改
    C# 键值对数据排序
    ant使用小结
    给我们的7句话
  • 原文地址:https://www.cnblogs.com/hbsfgl/p/5288024.html
Copyright © 2011-2022 走看看