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

      

  • 相关阅读:
    Android中Intent传递对象的两种方法(Serializable,Parcelable)
    Android安全机制(2) Android Permission权限控制机制
    Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
    finder怎么才能找到library
    Mac下Android Studio中获取SHA1和MD5
    andorid 自定义seekbar
    C# Sending data using GET or POST ZZ
    gmail
    load dll
    C# Read/Write another Process' Memory ZZ
  • 原文地址:https://www.cnblogs.com/hbsfgl/p/5288024.html
Copyright © 2011-2022 走看看