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

      

  • 相关阅读:
    LamBda学习(一)
    如何返回一个只读泛型集合
    Socket编程笔记同步
    如何快速读取大文件(看csdn一网友要求写的)没有测试具体的速度。
    如何实现项目脚本的批量生成
    如何实现WORD查找完成后不提示的代码
    W32/Pate.a 病毒处理小记
    在WORD中用VBA实现光标移动与内容选择
    2. WCF 消息操作
    3. WCF 异常处理
  • 原文地址:https://www.cnblogs.com/hbsfgl/p/5288024.html
Copyright © 2011-2022 走看看