예제 #1
0
        public async Task BeforeRequestAsyncTest()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, new
            {
                name     = "laojiu",
                birthDay = DateTime.Parse("2010-10-10")
            });

            context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.webapi.com/");
            context.HttpContext.RequestMessage.Method     = HttpMethod.Post;

            var attr = new JsonContentAttribute()
            {
                CharSet = "utf-16"
            };
            await attr.OnRequestAsync(new ApiParameterContext(context, 0));

            var body = await context.HttpContext.RequestMessage.Content.ReadAsUtf8ByteArrayAsync();

            var options = context.HttpContext.HttpApiOptions.JsonSerializeOptions;

            using var buffer = new RecyclableBufferWriter <byte>();
            JsonBufferSerializer.Serialize(buffer, context.Arguments[0], options);
            var target = buffer.WrittenSpan.ToArray();

            Assert.True(body.SequenceEqual(target));
        }
        public async Task OnRequestAsync_Parameter_Timespan_Test()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, 5);

            var attr = new TimeoutAttribute();

            var parameterContext = new ApiParameterContext(context, 0);
            await attr.OnRequestAsync(parameterContext);

            await Task.Delay(20);

            var canceled = context.HttpContext.CancellationTokens[0].IsCancellationRequested;

            Assert.True(canceled);

            context.Arguments[0] = Guid.NewGuid();

            await Assert.ThrowsAsync <ApiInvalidConfigException>(()
                                                                 => attr.OnRequestAsync(parameterContext));

            context.Arguments[0] = null;

            await attr.OnRequestAsync(parameterContext);

            Assert.True(context.HttpContext.CancellationTokens.Count == 1);
        }
        public async Task OnRequestAsyncRelativeTest()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, "http://www.baidu.com");

            var attr = new UriAttribute();
            await attr.OnRequestAsync(new ApiParameterContext(context, 0));

            Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.baidu.com"));

            context.Arguments[0] = "/login";
            await attr.OnRequestAsync(new ApiParameterContext(context, 0));

            Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.baidu.com/login"));

            context.Arguments[0] = "/login/login2";
            await attr.OnRequestAsync(new ApiParameterContext(context, 0));

            Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.baidu.com/login/login2"));

            context.Arguments[0] = "login3";
            await attr.OnRequestAsync(new ApiParameterContext(context, 0));

            Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.baidu.com/login/login3"));
        }
예제 #4
0
        public async Task OnRequestAsyncTest()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, new
            {
                @class = 123,
                xx_yy  = "xxyy"
            });

            var attr = new HeadersAttribute();

            context.HttpContext.RequestMessage.Headers.Clear();
            await attr.OnRequestAsync(new ApiParameterContext(context, 0));

            context.HttpContext.RequestMessage.Headers.TryGetValues("xx-yy", out IEnumerable <string> values);
            Assert.Equal("xxyy", values.FirstOrDefault());

            context.HttpContext.RequestMessage.Headers.TryGetValues("class", out IEnumerable <string> cValues);
            Assert.Equal("123", cValues.FirstOrDefault());



            attr.UnderlineToMinus = false;
            context.HttpContext.RequestMessage.Headers.Clear();
            await attr.OnRequestAsync(new ApiParameterContext(context, 0));

            context.HttpContext.RequestMessage.Headers.TryGetValues("xx_yy", out IEnumerable <string> values2);
            Assert.Equal("xxyy", values2.FirstOrDefault());
        }
        public async Task OnRequestAsyncTest()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, string.Empty);

            context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.webapi.com/");
            context.HttpContext.RequestMessage.Method     = HttpMethod.Post;

            var attr = new HttpPutAttribute();
            await attr.OnRequestAsync(context);

            Assert.True(context.HttpContext.RequestMessage.Method == HttpMethod.Put);

            var attr2 = new HttpPutAttribute("/login");
            await attr2.OnRequestAsync(context);

            Assert.True(context.HttpContext.RequestMessage.Method == HttpMethod.Put);
            Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.webapi.com/login"));

            var attr3 = new HttpPutAttribute("http://www.baidu.com");
            await attr3.OnRequestAsync(context);

            Assert.True(context.HttpContext.RequestMessage.Method == HttpMethod.Put);
            Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.baidu.com"));
        }
        public async Task OnRequestAsync()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, string.Empty);

            var attr = new HeaderAttribute("MyHeader", "laojiu");
            await attr.OnRequestAsync(context);

            context.HttpContext.RequestMessage.Headers.TryGetValues("MyHeader", out IEnumerable <string> values);
            Assert.Equal("laojiu", values.First());
        }
        public async Task OnRequestAsyncTest()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, string.Empty);

            var attr = new BasicAuthAttribute("laojiu", "123456");
            await attr.OnRequestAsync(context);

            var auth = Convert.ToBase64String(Encoding.ASCII.GetBytes("laojiu:123456"));

            Assert.True(context.HttpContext.RequestMessage.Headers.Authorization.Scheme == "Basic");
            Assert.True(context.HttpContext.RequestMessage.Headers.Authorization.Parameter == auth);
        }
예제 #8
0
        public void CtorTest()
        {
            var m = typeof(IDescriptorApi).GetMethod("Get1");
            var d = new DefaultApiActionDescriptor(m);

            Assert.True(d.Attributes.Count == 3);
            Assert.True(d.FilterAttributes.Count == 1);
            Assert.True(d.Parameters.Count == 2);
            Assert.True(d.Name == m.Name);
            Assert.True(d.Member == m);
            Assert.True(d.Return.Attributes.Count == 1);
            Assert.True(d.Return.ReturnType == m.ReturnType);
        }
        public async Task StringResultTest()
        {
            var apiAction       = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("StringAsync"));
            var context         = new TestRequestContext(apiAction, "laojiu");
            var responseContext = new ApiResponseContext(context);

            context.HttpContext.RequestMessage.Method   = HttpMethod.Post;
            context.HttpContext.ResponseMessage.Content = new StringContent("laojiu", Encoding.UTF8);

            var attr = new RawReturnAttribute();
            await attr.OnResponseAsync(responseContext);

            Assert.True(responseContext.Result?.ToString() == "laojiu");
        }
        public async Task OnRequestAsync()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, string.Empty);

            context.HttpContext.RequestMessage.Method = HttpMethod.Post;

            var attr = new FormFieldAttribute("value", "laojiu");
            await attr.OnRequestAsync(context);

            var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync();

            Assert.Equal("value=laojiu", body);
        }
예제 #11
0
        public async Task OnRequestAsyncTest()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, string.Empty);

            Assert.Throws <ArgumentNullException>(() => new HttpHostAttribute(null));
            Assert.Throws <UriFormatException>(() => new HttpHostAttribute("/"));

            context.HttpContext.RequestMessage.RequestUri = null;
            var attr = new HttpHostAttribute("http://www.webapiclient.com");
            await attr.OnRequestAsync(context);

            Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.webapiclient.com"));
        }
        public async Task OnRequestAsync()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, 10);

            var attr = new TimeoutAttribute(50);
            await attr.OnRequestAsync(context);

            await Task.Delay(100);

            var canceled = context.HttpContext.CancellationTokens[0].IsCancellationRequested;

            Assert.True(canceled);
        }
예제 #13
0
        public async Task OnRequestAsync_Parameter()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, "laojiu");

            context.HttpContext.RequestMessage.Method = HttpMethod.Post;
            var parameterContext = new ApiParameterContext(context, 0);

            var attr = new FormDataTextAttribute();
            await attr.OnRequestAsync(parameterContext);

            var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync();

            Assert.Contains(get("value", "laojiu"), body);
        }
예제 #14
0
        public async Task OnRequestAsyncTest()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, new StringContent("laojiu"));

            context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.mywebapi.com");
            context.HttpContext.RequestMessage.Method     = HttpMethod.Post;

            var attr = new HttpContentTypeAttribute();
            await attr.OnRequestAsync(new ApiParameterContext(context, 0));

            var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync();

            Assert.True(body == "laojiu");
        }
예제 #15
0
        public async Task EnsureSuccessStatusCodeTest()
        {
            var apiAction       = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("JsonXmlAsync"));
            var context         = new TestRequestContext(apiAction, "laojiu");
            var responseContext = new ApiResponseContext(context);

            context.HttpContext.RequestMessage.Method      = HttpMethod.Post;
            context.HttpContext.ResponseMessage.Content    = new JsonContent();
            context.HttpContext.ResponseMessage.StatusCode = System.Net.HttpStatusCode.InternalServerError;

            await Assert.ThrowsAsync <ApiResponseStatusException>(async() =>
            {
                var attr = new JsonReturnAttribute()
                {
                    EnsureSuccessStatusCode = true
                };
                await attr.OnResponseAsync(responseContext);
            });
        }
예제 #16
0
        public async Task OnRequestAsyncTest()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, new
            {
                name     = "laojiu",
                birthDay = DateTime.Parse("2010-10-10")
            });

            context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.webapi.com/");
            context.HttpContext.RequestMessage.Method     = HttpMethod.Post;

            var attr = new PathQueryAttribute();
            await attr.OnRequestAsync(new ApiParameterContext(context, 0));

            var birthday = KeyValueSerializer.Serialize("time", DateTime.Parse("2010-10-10"), null)[0].Value;
            var target   = new Uri("http://www.webapi.com?name=laojiu&birthDay=" + Uri.EscapeDataString(birthday));

            Assert.True(context.HttpContext.RequestMessage.RequestUri == target);
        }
예제 #17
0
        public async Task XmlResultTest()
        {
            var apiAction       = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("JsonXmlAsync"));
            var context         = new TestRequestContext(apiAction, "laojiu");
            var responseContext = new ApiResponseContext(context);

            context.HttpContext.RequestMessage.Method = HttpMethod.Post;

            var model = new TestModel();
            var xml   = XmlSerializer.Serialize(model, null);

            context.HttpContext.ResponseMessage.Content = new XmlContent(xml, Encoding.UTF8);

            var attr = new XmlReturnAttribute();
            await attr.OnResponseAsync(responseContext);

            var result = responseContext.Result as TestModel;

            Assert.True(model.Name == result.Name && model.Age == result.Age);
        }
        public async Task OnRequestAsyncTest()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, new Model
            {
                name     = "laojiu",
                birthDay = DateTime.Parse("2010-10-10")
            });

            context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.webapi.com/");
            context.HttpContext.RequestMessage.Method     = HttpMethod.Post;

            var attr = new XmlContentAttribute();
            await attr.OnRequestAsync(new ApiParameterContext(context, 0));

            var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync();

            var target = XmlSerializer.Serialize(context.Arguments[0], null);

            Assert.True(body == target);
        }
예제 #19
0
        public async Task OnRequestAsyncTest()
        {
            var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, new
            {
                name     = "老 九",
                birthDay = DateTime.Parse("2010-10-10")
            });

            context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.mywebapi.com");
            context.HttpContext.RequestMessage.Method     = HttpMethod.Post;

            var attr = new FormContentAttribute();
            await attr.OnRequestAsync(new ApiParameterContext(context, 0));

            var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync();

            var time   = KeyValueSerializer.Serialize("time", DateTime.Parse("2010-10-10"), null);
            var target = $"name={HttpUtility.UrlEncode("老 九", Encoding.UTF8)}&birthDay={HttpUtility.UrlEncode(time[0].Value, Encoding.UTF8)}";

            Assert.True(body.ToUpper() == target.ToUpper());
        }
        public async Task OnRequestAsync()
        {
            var doc = new JsonPatchDocument <Model>();

            doc.Replace(item => item.Name, "33");
            doc.Replace(item => item.Age, 10);

            var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, string.Empty);

            context.HttpContext.RequestMessage.Method = new System.Net.Http.HttpMethod("Patch");
            await doc.OnRequestAsync(new ApiParameterContext(context, 0));

            var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync();

            var ops = System.Text.Json.JsonSerializer.Deserialize <Op[]>(body);

            Assert.Equal(2, ops.Length);

            Assert.Equal("replace", ops[0].op);
            Assert.Equal("/name", ops[0].path);
            Assert.Equal("33", ops[0].value.ToString());
        }