Exemplo n.º 1
0
        public static void InstanceContextMode_PerCall()
        {
            PerCallInstanceContextSimpleServiceAndBehavior.ClearCounts();
            var services = new ServiceCollection();

            services.AddTransient <PerCallInstanceContextSimpleServiceAndBehavior>();
            string   serviceAddress    = "http://localhost/dummy";
            var      serviceDispatcher = TestHelper.BuildDispatcher <PerCallInstanceContextSimpleServiceAndBehavior>(services, serviceAddress);
            IChannel mockChannel       = new MockReplyChannel(services.BuildServiceProvider());
            var      dispatcher        = serviceDispatcher.CreateServiceChannelDispatcher(mockChannel);

            // Instance created as part of service startup to probe if type is availale in DI
            Assert.Equal(1, PerCallInstanceContextSimpleServiceAndBehavior.CreationCount);
            // Instance not disposed as it implements IServiceBehavior and is added to service behaviors
            Assert.Equal(0, PerCallInstanceContextSimpleServiceAndBehavior.DisposalCount);
            Assert.Equal(1, PerCallInstanceContextSimpleServiceAndBehavior.AddBindingParametersCallCount);
            Assert.Equal(1, PerCallInstanceContextSimpleServiceAndBehavior.ApplyDispatchBehaviorCount);
            Assert.Equal(1, PerCallInstanceContextSimpleServiceAndBehavior.ValidateCallCount);

            PerCallInstanceContextSimpleServiceAndBehavior.ClearCounts();
            var requestContext = TestRequestContext.Create(serviceAddress);

            dispatcher.DispatchAsync(requestContext, CancellationToken.None).Wait();
            requestContext = TestRequestContext.Create(serviceAddress);
            dispatcher.DispatchAsync(requestContext, CancellationToken.None).Wait();
            Assert.Equal(2, PerCallInstanceContextSimpleServiceAndBehavior.CreationCount);
            Assert.Equal(2, PerCallInstanceContextSimpleServiceAndBehavior.DisposalCount);
        }
Exemplo n.º 2
0
        public static void InstanceContextMode_PerSession_WithBehavior_NoInjection()
        {
            PerSessionInstanceContextSimpleServiceAndBehavior.ClearCounts();
            var      services          = new ServiceCollection();
            string   serviceAddress    = "http://localhost/dummy";
            var      serviceDispatcher = TestHelper.BuildDispatcher <PerSessionInstanceContextSimpleServiceAndBehavior>(services, serviceAddress);
            IChannel mockChannel       = new MockReplySessionChannel(services.BuildServiceProvider());
            var      dispatcher        = serviceDispatcher.CreateServiceChannelDispatcher(mockChannel);

            // Instance created as part of service startup as it implements IServiceBehavior
            Assert.Equal(1, PerSessionInstanceContextSimpleServiceAndBehavior.CreationCount);
            // Instance not disposed as it implements IServiceBehavior and is added to service behaviors
            Assert.Equal(0, PerSessionInstanceContextSimpleServiceAndBehavior.DisposalCount);
            Assert.Equal(1, PerSessionInstanceContextSimpleServiceAndBehavior.AddBindingParametersCallCount);
            Assert.Equal(1, PerSessionInstanceContextSimpleServiceAndBehavior.ApplyDispatchBehaviorCount);
            Assert.Equal(1, PerSessionInstanceContextSimpleServiceAndBehavior.ValidateCallCount);

            PerSessionInstanceContextSimpleServiceAndBehavior.ClearCounts();
            var requestContext = TestRequestContext.Create(serviceAddress);

            dispatcher.DispatchAsync(requestContext, CancellationToken.None).Wait();
            requestContext = TestRequestContext.Create(serviceAddress);
            dispatcher.DispatchAsync(requestContext, CancellationToken.None).Wait();
            requestContext = TestRequestContext.Create(serviceAddress);
            dispatcher.DispatchAsync(requestContext, CancellationToken.None).Wait();
            // Close channel/session by sending null request context
            dispatcher.DispatchAsync(null, CancellationToken.None).Wait();
            Assert.Equal(1, PerSessionInstanceContextSimpleServiceAndBehavior.CreationCount);
            Assert.Equal(1, PerSessionInstanceContextSimpleServiceAndBehavior.DisposalCount);
        }
Exemplo n.º 3
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));
        }
Exemplo n.º 4
0
        public static void InstanceContextMode_Single()
        {
            SingleInstanceContextSimpleService.ClearCounts();
            var services        = new ServiceCollection();
            var serviceInstance = new SingleInstanceContextSimpleService();

            services.AddSingleton(serviceInstance);
            string   serviceAddress    = "http://localhost/dummy";
            var      serviceDispatcher = TestHelper.BuildDispatcher <SingleInstanceContextSimpleService>(services, serviceAddress);
            IChannel mockChannel       = new MockReplyChannel(services.BuildServiceProvider());
            var      dispatcher        = serviceDispatcher.CreateServiceChannelDispatcher(mockChannel);

            Assert.Equal(1, SingleInstanceContextSimpleService.AddBindingParametersCallCount);
            Assert.Equal(1, SingleInstanceContextSimpleService.ApplyDispatchBehaviorCount);
            Assert.Equal(1, SingleInstanceContextSimpleService.ValidateCallCount);

            var requestContext = TestRequestContext.Create(serviceAddress);

            dispatcher.DispatchAsync(requestContext, CancellationToken.None).Wait();
            requestContext = TestRequestContext.Create(serviceAddress);
            dispatcher.DispatchAsync(requestContext, CancellationToken.None).Wait();
            Assert.Equal(1, SingleInstanceContextSimpleService.CreationCount);
            Assert.Equal(0, SingleInstanceContextSimpleService.DisposalCount);
            Assert.Equal(2, serviceInstance.CallCount);
        }
Exemplo n.º 5
0
        public static void InstanceContextMode_PerSession_NoInjection()
        {
            PerSessionInstanceContextSimpleService.ClearCounts();
            var      services          = new ServiceCollection();
            string   serviceAddress    = "http://localhost/dummy";
            var      serviceDispatcher = TestHelper.BuildDispatcher <PerSessionInstanceContextSimpleService>(services, serviceAddress);
            IChannel mockChannel       = new MockReplySessionChannel(services.BuildServiceProvider());
            var      dispatcher        = serviceDispatcher.CreateServiceChannelDispatcher(mockChannel);

            // Instance shouldn't be created as part of service startup to as type isn't available in DI
            Assert.Equal(0, PerSessionInstanceContextSimpleService.CreationCount);
            Assert.Equal(0, PerSessionInstanceContextSimpleService.DisposalCount);

            var requestContext = TestRequestContext.Create(serviceAddress);

            dispatcher.DispatchAsync(requestContext, CancellationToken.None).Wait();
            requestContext = TestRequestContext.Create(serviceAddress);
            dispatcher.DispatchAsync(requestContext, CancellationToken.None).Wait();
            requestContext = TestRequestContext.Create(serviceAddress);
            dispatcher.DispatchAsync(requestContext, CancellationToken.None).Wait();
            // Close channel/session by sending null request context
            dispatcher.DispatchAsync(null, CancellationToken.None).Wait();
            Assert.Equal(1, PerSessionInstanceContextSimpleService.CreationCount);
            Assert.Equal(1, PerSessionInstanceContextSimpleService.DisposalCount);
        }
Exemplo n.º 6
0
        public async Task OnRequestAsyncRelativeTest()
        {
            var apiAction = new ApiActionDescriptor(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"));
        }
Exemplo n.º 7
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());
        }
Exemplo n.º 8
0
        public async Task OnRequestAsyncTest()
        {
            var apiAction = new ApiActionDescriptor(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"));
        }
Exemplo n.º 9
0
    public static void BuildDispatcherWithConfiguration_Singleton_Not_WellKnown()
    {
        string serviceAddress = "http://localhost/dummy";
        var    services       = new ServiceCollection();

        services.AddServiceModelServices();
        var serverAddressesFeature = new ServerAddressesFeature();

        serverAddressesFeature.Addresses.Add(serviceAddress);
        IServer server = new MockServer();

        server.Features.Set <IServerAddressesFeature>(serverAddressesFeature);
        services.AddSingleton(server);
        var serviceProvider = services.BuildServiceProvider();
        var serviceBuilder  = serviceProvider.GetRequiredService <IServiceBuilder>();

        serviceBuilder.AddService <SimpleSingletonService>();
        var binding = new CustomBinding("BindingName", "BindingNS");

        binding.Elements.Add(new MockTransportBindingElement());
        serviceBuilder.AddServiceEndpoint <SimpleSingletonService, ISimpleService>(binding, serviceAddress);
        var dispatcherBuilder = serviceProvider.GetRequiredService <IDispatcherBuilder>();
        var dispatchers       = dispatcherBuilder.BuildDispatchers(typeof(SimpleSingletonService));

        Assert.Single(dispatchers);
        var dispatcher = dispatchers[0];

        Assert.Equal("foo", dispatcher.Binding.Scheme);
        Assert.Equal(serviceAddress, dispatcher.BaseAddress.ToString());
        var      requestContext = TestRequestContext.Create(serviceAddress);
        IChannel mockChannel    = new MockReplyChannel(serviceProvider);

        dispatcher.DispatchAsync(requestContext, mockChannel, CancellationToken.None).Wait();
        requestContext.ValidateReply();
    }
Exemplo n.º 10
0
        public async Task OnRequestAsync_Parameter_Timespan_Test()
        {
            var apiAction = new ApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, 5);

            var attr = new TimeoutAttribute();

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

            await Task.Delay(20);

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

            Assert.True(canceled);

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

            await Assert.ThrowsAsync <HttpApiInvalidOperationException>(()
                                                                        => attr.OnRequestAsync(parameterContext, () => Task.CompletedTask));

            context.Arguments[0] = null;

            await attr.OnRequestAsync(parameterContext, () => Task.CompletedTask);

            Assert.True(context.CancellationTokens.Count == 1);
        }
Exemplo n.º 11
0
        public void DisposeHttpEndpointContextDisposesParent()
        {
            bool disposed       = false;
            var  requestContext = new TestRequestContext(); // TODO: kinda just tests the test...

            requestContext.OnDispose += delegate { disposed = true; };
            requestContext.Dispose();
            Assert.True(disposed);
        }
Exemplo n.º 12
0
        public static void BuildDispatcherAndCallService(ServiceCollection services)
        {
            string   serviceAddress    = "http://localhost/dummy";
            var      serviceDispatcher = BuildDispatcher <SimpleService>(services, serviceAddress);
            IChannel mockChannel       = new MockReplyChannel(services.BuildServiceProvider());
            var      dispatcher        = serviceDispatcher.CreateServiceChannelDispatcher(mockChannel);
            var      requestContext    = TestRequestContext.Create(serviceAddress);

            dispatcher.DispatchAsync(requestContext, CancellationToken.None).Wait();
        }
Exemplo n.º 13
0
        public async Task OnRequestAsync()
        {
            var apiAction = new ApiActionDescriptor(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());
        }
Exemplo n.º 14
0
        public async Task OnRequestAsync()
        {
            var apiAction = new ApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, "value");

            var basicAuth = new BasicAuth("laojiu", "123456");
            await basicAuth.OnRequestAsync(new ApiParameterContext(context, 0));

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

            Assert.True(context.HttpContext.RequestMessage.Headers.Authorization.Parameter == auth);
        }
        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);
        }
Exemplo n.º 16
0
        public void Should_Make_RequestBus_Context_Available_To_Handler()
        {
            var sut = IocHelper.GetRequestBus(sc =>
            {
                sc.AddTransient <IRequestBusContextWriter, RequestContextWriter>();
                sc.AddTransient <IRequestHandler <TestRequestContext, None>, TestRequestContextHandler>();
            });

            var request = new TestRequestContext();

            sut.Send(request);
            request.MsgInContext.ShouldBe("Hello World!");
        }
Exemplo n.º 17
0
        public async Task OnRequestAsync()
        {
            var apiAction = new ApiActionDescriptor(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.CancellationTokens[0].IsCancellationRequested;

            Assert.True(canceled);
        }
Exemplo n.º 18
0
        public async Task OnRequestAsync()
        {
            var apiAction = new ApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, string.Empty);

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

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

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

            Assert.Contains(get("value", "laojiu"), body);
        }
Exemplo n.º 19
0
        public async Task OnRequestAsyncTest()
        {
            var apiAction = new ApiActionDescriptor(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"));
        }
Exemplo n.º 20
0
        public async Task StringResultTest()
        {
            var apiAction       = new ApiActionDescriptor(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");
        }
Exemplo n.º 21
0
        public async Task OnRequestAsync()
        {
            var apiAction = new ApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, "value");

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

            IApiParameter formField = new FormField("laojiu");
            await formField.OnRequestAsync(new ApiParameterContext(context, 0));

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

            Assert.Equal("value=laojiu", body);
        }
        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 FormFieldAttribute();
            await attr.OnRequestAsync(parameterContext);

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

            Assert.Equal("value=laojiu", body);
        }
Exemplo n.º 23
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");
        }
Exemplo n.º 24
0
        public async Task OnRequestAsync_Parameter_Double_Test()
        {
            var apiAction = new ApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync"));
            var context   = new TestRequestContext(apiAction, 1);

            var attr             = new TimeoutAttribute();
            var parameterContext = new ApiParameterContext(context, 0);
            await attr.OnRequestAsync(parameterContext, () => Task.CompletedTask);

            await Task.Delay(20);

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

            Assert.True(canceled);
        }
Exemplo n.º 25
0
        public async Task ByteArrayResultTest()
        {
            var apiAction       = new ApiActionDescriptor(typeof(ITestApi).GetMethod("ByteArrayAsync"));
            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 RawTypeReturnAttribute();
            await attr.OnResponseAsync(responseContext, () => Task.CompletedTask);

            var text = Encoding.UTF8.GetString((byte[])responseContext.Result);

            Assert.True(text == "laojiu");
        }
        public async Task EnsureSuccessStatusCodeTest()
        {
            var apiAction       = new ApiActionDescriptor(typeof(ITestApi).GetMethod("JsonXmlAsync"));
            var context         = new TestRequestContext(apiAction, "laojiu");
            var responseContext = new ApiResponseContext(context);

            context.HttpContext.RequestMessage.Method      = HttpMethod.Post;
            context.HttpContext.ResponseMessage.StatusCode = System.Net.HttpStatusCode.InternalServerError;

            var attr = new JsonReturnAttribute()
            {
                EnsureSuccessStatusCode = true
            };
            await attr.OnResponseAsync(responseContext, () => Task.CompletedTask);

            Assert.IsType <HttpStatusFailureException>(responseContext.Exception);
        }
Exemplo n.º 27
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);
            });
        }
        public async Task XmlResultTest()
        {
            var apiAction       = new ApiActionDescriptor(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   = context.HttpContext.Services.GetRequiredService <IXmlFormatter>().Serialize(model, Encoding.UTF8);

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

            var attr = new XmlReturnAttribute();
            await attr.OnResponseAsync(responseContext, () => Task.CompletedTask);

            var result = responseContext.Result as TestModel;

            Assert.True(model.Name == result.Name && model.Age == result.Age);
        }
Exemplo n.º 29
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);
        }
Exemplo n.º 30
0
        public async Task OnRequestAsyncTest()
        {
            var apiAction = new ApiActionDescriptor(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 = context.HttpContext.Services.GetService <IKeyValueFormatter>().Serialize("time", DateTime.Parse("2010-10-10"), null)[0].Value;
            var target   = new Uri("http://www.webapi.com?name=laojiu&birthDay=" + HttpUtility.UrlEncode(birthday, Encoding.GetEncoding(attr.Encoding)));

            Assert.True(context.HttpContext.RequestMessage.RequestUri == target);
        }