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");
    

      

  • 相关阅读:
    2011/6/24 数据库分析
    项目代码总结
    背景透明 by sofish
    ie6 reflow bug
    ID与CLASS的使用技巧
    CSS浮动属性Float详解 by 帕兰
    javascript闭包 by 李松峰
    详解CSS选择器、优先级与匹配原理
    垂直对齐:verticalalign属性 by ddcatlee
    行高lineheight,以及基线、顶线、中线和底线,还有内容区域、行内框和行框 by 豆豆猫的窝
  • 原文地址:https://www.cnblogs.com/hbsfgl/p/5288024.html
Copyright © 2011-2022 走看看