protected MicroserviceResponse Execute(string url, Object content, HttpMethod requestMethod)
        {
            string accessToken = _httpContextAccessor.HttpContext.GetTokenAsync("access_token").Result;

            _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            Task <HttpResponseMessage> requestTask = null;

            switch (requestMethod)
            {
            case HttpMethod.Get:
                requestTask = _client.GetAsync(url);
                break;

            case HttpMethod.Post:
                requestTask = _client.PostAsync(url, new JsonContent(content));
                break;

            case HttpMethod.Put:
                requestTask = _client.PutAsync(url, new JsonContent(content));
                break;

            case HttpMethod.Delete:
                requestTask = _client.DeleteAsync(url);
                break;
            }

            HttpResponseMessage httpResponseMessage = requestTask.Result;
            string responseBody = httpResponseMessage.Content.ReadAsStringAsync().Result;

            MicroserviceResponse result = new MicroserviceResponse {
                ReturnData = responseBody, Code = httpResponseMessage.StatusCode
            };

            return(result);
        }
        public string GetData(HttpMethod method, string url)
        {
            var item = _table.ExecuteQuery(new TableQuery <JsonData>()).SingleOrDefault(x =>
                                                                                        x.Url == Uri.UnescapeDataString(url) && x.HttpMethod.Equals(method.ToString(), StringComparison.InvariantCultureIgnoreCase));

            return(item?.Data);
        }
        public async Task overwrites_existing_data_in_local_storage_when_same_key_is_used()
        {
            var original = new TestObject {
                Key = 123, Value = "String value 123"
            };
            const HttpMethod httpMethod = HttpMethod.Get;

            var key = Uri.EscapeDataString("data?v=1.0&id=12345");
            var url = $"api-stub/save?httpMethod={httpMethod}&url={key}";

            var response = await _webApiClient.PostAsJsonAsync(url, original);

            response.EnsureSuccessStatusCode();

            var expected = new TestObject {
                Key = 789, Value = "String value 789"
            };

            response = await _webApiClient.PostAsJsonAsync(url, expected);

            response.EnsureSuccessStatusCode();

            var data = _dataRepository.GetData(httpMethod, key);

            data.Should().BeEquivalentTo(JsonSerializer.Serialize(expected));
        }
示例#4
0
        private static HttpRequest CreateStubRequest(HttpMethod httpMethod, string requestScheme, string host, string path)
        {
            var request = new Mock <HttpRequest>();

            request.Setup(req => req.Method).Returns(httpMethod.ToString().ToUpper);
            request.Setup(req => req.Scheme).Returns(requestScheme);
            request.Setup(req => req.Host).Returns(new HostString(host));
            request.Setup(req => req.Path).Returns(path);

            return(request.Object);
        }
        public async Task InsertOrReplace(HttpMethod method, string url, object data)
        {
            var record = new JsonData
            {
                PartitionKey = _options.EnvironmentName,
                RowKey       = $"{method}_{Uri.EscapeDataString(url)}",
                Url          = Uri.UnescapeDataString(url),
                HttpMethod   = method.ToString(),
                Data         = JsonSerializer.Serialize(data)
            };

            var operation = TableOperation.InsertOrReplace(record);
            await _table.ExecuteAsync(operation);
        }
示例#6
0
        public async Task deletes_existing_data_in_local_storage_when_same_key_is_used()
        {
            const HttpMethod httpMethod = HttpMethod.Get;

            var key = Uri.EscapeDataString("/data?v=1.0&id=12345");

            await _dataRepository.InsertOrReplace(httpMethod, key, "test");

            var response = await _webApiClient.DeleteAsync($"api-stub/delete?httpMethod={httpMethod}&url={key}");

            response.EnsureSuccessStatusCode();

            var data = _dataRepository.GetData(httpMethod, key);

            data.Should().BeNullOrEmpty();
        }
示例#7
0
        public async Task WhenIMethodTheFollowingUrl(HttpMethod method, string url)
        {
            var client = _context.Get <HttpClient>(ContextKeys.HttpClient);

            HttpResponseMessage response = null;

            switch (method)
            {
            case HttpMethod.Get:
                response = await client.GetAsync(url);

                break;

            case HttpMethod.Post:
                if (!_context.TryGetValue <HttpContent>(ContextKeys.HttpResponse, out var postContent))
                {
                    Assert.Fail($"scenario context does not contain value for key [{ContextKeys.HttpContent}]");
                }
                response = await client.PostAsync(url, postContent);

                break;

            case HttpMethod.Put:
                if (!_context.TryGetValue <HttpContent>(ContextKeys.HttpResponse, out var putContent))
                {
                    Assert.Fail($"scenario context does not contain value for key [{ContextKeys.HttpContent}]");
                }
                response = await client.PutAsync(url, putContent);

                break;

            case HttpMethod.Delete:
                response = await client.DeleteAsync(url);

                break;

            default:
                Assert.Fail($"case for http method [{method}] has not been implemented");
                break;
            }

            _context.Set(method, ContextKeys.HttpMethod);
            _context.Set(url, ContextKeys.HttpUri);
            _context.Set(response, ContextKeys.HttpResponse);
        }
        public async Task saved_data_is_available_after_save_and_refresh()
        {
            var expected = new TestObject {
                Key = 123, Value = "String value 123"
            };
            const HttpMethod httpMethod = HttpMethod.Get;

            var key = $"/{Guid.NewGuid()}";
            var url = $"api-stub/save?httpMethod={httpMethod}&url={key}";

            var response = await _webApiClient.PostAsJsonAsync(url, expected);

            response.EnsureSuccessStatusCode();

            var data = await _wireMockApiClient.GetFromJsonAsync <TestObject>(key);

            data.Should().BeEquivalentTo(expected);
        }
示例#9
0
        [DisableConcurrentExecution(90)] //禁止使用並行
        public string CallWebApi([DisplayData("服務端點",
                                              "http://localhost:8080/test.html?name=youname",
                                              "請求位置必須為 http or https")]
                                 Uri url,
                                 [DisplayData("請求方式",
                                              "POST",
                                              "常用的請求方式 GET、POST、PUT、DELETE ")]
                                 Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpMethod method = Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpMethod.Post,
                                 [DisplayData("請求內容", IsMultiLine = true)]
                                 string content = null,
                                 [DisplayData("內容類型",
                                              "application/x-www-form-urlencoded",
                                              "常見的有 application/x-www-form-urlencoded、multipart/form-data、text/plain、application/json 等",
                                              "application/x-www-form-urlencoded")]
                                 string contentType = "application/x-www-form-urlencoded",
                                 [DisplayData("內容編碼方式",
                                              "utf-8",
                                              "常見的有 UTF-8、Unicode、ASCII,錯誤的編碼會導致內容無法正確呈現",
                                              "utf-8",
                                              ConvertType = typeof(EncodingsInputDataList))]
                                 string contentEncoding = "UTF-8",
                                 [DisplayData("回應結果內容編碼",
                                              "utf-8",
                                              "常見的有 UTF-8、Unicode、ASCII,錯誤的編碼會導致內容無法正確呈現",
                                              "utf-8",
                                              ConvertType = typeof(EncodingsInputDataList))]
                                 string responseEncoding = "UTF-8",
                                 PerformContext context  = null)
        {
            var defaultContentEncoding  = Encoding.GetEncoding(contentEncoding) ?? Encoding.UTF8;
            var defaultResponseEncoding = Encoding.GetEncoding(responseEncoding) ?? Encoding.UTF8;

            context.WriteLine($"測試用,Now:{DateTime.Now}");

            //Thread.Sleep(30000);
            return($"模擬呼叫Web API返回結果,目前時間:{DateTime.Now},內容編碼:{defaultContentEncoding},回傳編碼:{defaultResponseEncoding}");
        }
示例#10
0
 public HttpVersionAndMethod(Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpMethod method, int methodEnd)
 {
     throw null;
 }
示例#11
0
 public static HttpMethod MapMethod(KestrelMethod method)
 => method switch
 {
 public async Task Delete(HttpMethod method, string url)
 {
     var record    = _table.ExecuteQuery(new TableQuery <JsonData>()).Single(x => string.Equals(x.Url, url));
     var operation = TableOperation.Delete(record);
     await _table.ExecuteAsync(operation);
 }
示例#13
0
        private void AddProductMessage(string data, string url, Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpMethod method)
        {
            var productMessage = new OutboxMessage(data, url, method);

            _context.OutboxMessages.Add(productMessage);
        }