public async Task XmlResultTest()
        {
            var context = new ApiActionContext
            {
                HttpApiConfig  = new HttpApiConfig(),
                RequestMessage = new HttpApiRequestMessage
                {
                    Method     = HttpMethod.Post,
                    RequestUri = new Uri("http://www.webapi.com/")
                },
                ResponseMessage     = new HttpResponseMessage(System.Net.HttpStatusCode.OK),
                ApiActionDescriptor = ApiDescriptorCache
                                      .GetApiActionDescriptor(typeof(IMyApi)
                                                              .GetMethod("JsonXmlAsync"))
            };

            var model = new Model();
            var xml   = context.HttpApiConfig.XmlFormatter.Serialize(model, Encoding.UTF8);

            context.ResponseMessage.Content = new StringContent(xml, Encoding.UTF8, "application/xml");

            var attr   = new AutoReturnAttribute();
            var result = await((IApiReturnAttribute)attr).GetTaskResult(context) as Model;

            Assert.True(model.Name == result.Name && model.Age == result.Age);
        }
        public async Task EnsureSuccessStatusCodeTest()
        {
            var context = new ApiActionContext
            {
                HttpApiConfig  = new HttpApiConfig(),
                RequestMessage = new HttpApiRequestMessage
                {
                    Method     = HttpMethod.Post,
                    RequestUri = new Uri("http://www.webapi.com/")
                },
                ResponseMessage     = new HttpResponseMessage(System.Net.HttpStatusCode.NotFound),
                ApiActionDescriptor = ApiDescriptorCache
                                      .GetApiActionDescriptor(typeof(IMyApi)
                                                              .GetMethod("JsonXmlAsync"))
            };

            var model = new Model();
            var xml   = context.HttpApiConfig.XmlFormatter.Serialize(model, Encoding.UTF8);

            context.ResponseMessage.Content = new StringContent(xml, Encoding.UTF8, "application/xml");

            var attr = new AutoReturnAttribute()
            {
                EnsureSuccessStatusCode = true
            };
            await Assert.ThrowsAsync <HttpStatusFailureException>(() => ((IApiReturnAttribute)attr).GetTaskResult(context));
        }
Exemplo n.º 3
0
        /// <summary>
        /// 请求Api的返回描述
        /// </summary>
        /// <param name="method">方法信息</param>
        /// <exception cref="ArgumentNullException"></exception>
        public ApiReturnDescriptor(MethodInfo method)
        {
            if (method == null)
            {
                throw new ArgumentNullException(nameof(method));
            }

            var returnAttribute = method.FindDeclaringAttribute <IApiReturnAttribute>(true);

            if (returnAttribute == null)
            {
                returnAttribute = new AutoReturnAttribute();
            }

            var dataTypeDefinition = method.ReturnType.GetGenericTypeDefinition();

            this.Attribute         = returnAttribute;
            this.ReturnType        = method.ReturnType;
            this.ReturnDataType    = method.ReturnType.GetGenericArguments().FirstOrDefault();
            this.IsTaskDefinition  = dataTypeDefinition == typeof(Task <>);
            this.IsITaskDefinition = dataTypeDefinition == typeof(ITask <>);

            var returnValueMapperAttribute = method.FindDeclaringAttribute <ReturnValueMapperAttribute>(true);

            if (returnValueMapperAttribute != null)
            {
                ReturnValueMapper = (IReturnValueMapper)Activator.CreateInstance(returnValueMapperAttribute.ReturnValueMapperType);

                this.DataType = new DataTypeDescriptor(returnValueMapperAttribute.ResponseType);
            }
            else
            {
                this.DataType = new DataTypeDescriptor(ReturnDataType);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 生成ApiReturnDescriptor
        /// </summary>
        /// <param name="method">方法信息</param>
        /// <returns></returns>
        private static ApiReturnDescriptor GetReturnDescriptor(MethodInfo method)
        {
            var returnAttribute = method.FindDeclaringAttribute <IApiReturnAttribute>(true);

            if (returnAttribute == null)
            {
                returnAttribute = new AutoReturnAttribute();
            }

            return(new ApiReturnDescriptor
            {
                Attribute = returnAttribute,
                TaskType = method.ReturnType,
                DataType = method.ReturnType.GetGenericArguments().FirstOrDefault(),
            });
        }
        public async Task StringResultTest()
        {
            var context = new TestActionContext(
                httpApi: null,
                httpApiConfig: new HttpApiConfig(),
                apiActionDescriptor: new ApiActionDescriptor(typeof(IMyApi).GetMethod("StringAsync")));

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

            var attr   = new AutoReturnAttribute();
            var result = await((IApiReturnAttribute)attr).GetTaskResult(context);

            Assert.True(result?.ToString() == "laojiu");
        }
Exemplo n.º 6
0
        /// <summary>
        /// 生成ApiReturnDescriptor
        /// </summary>
        /// <param name="method">方法信息</param>
        /// <returns></returns>
        private static ApiReturnDescriptor GetReturnDescriptor(MethodInfo method)
        {
            var returnAttribute = method.FindDeclaringAttribute <IApiReturnAttribute>(true);

            if (returnAttribute == null)
            {
                returnAttribute = new AutoReturnAttribute();
            }

            var dataType   = method.ReturnType.GetGenericArguments().FirstOrDefault();
            var descriptor = new ApiReturnDescriptor
            {
                Attribute   = returnAttribute,
                ReturnType  = method.ReturnType,
                GenericType = method.ReturnType.GetGenericTypeDefinition(),
                DataType    = dataType,
                ITaskCtor   = ApiTask.GetConstructor(dataType),
            };

            return(descriptor);
        }
        public async Task JsonResultTest()
        {
            var context = new TestActionContext(
                httpApi: null,
                httpApiConfig: new HttpApiConfig(),
                apiActionDescriptor: new ApiActionDescriptor(typeof(IMyApi).GetMethod("JsonXmlAsync")));

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


            var model = new Model();
            var json  = context.HttpApiConfig.JsonFormatter.Serialize(model, context.HttpApiConfig.FormatOptions);

            context.ResponseMessage.Content = new StringContent(json, Encoding.UTF8, "application/json");

            var attr   = new AutoReturnAttribute();
            var result = await((IApiReturnAttribute)attr).GetTaskResult(context) as Model;

            Assert.True(model.Name == result.Name && model.Age == result.Age);
        }
Exemplo n.º 8
0
        public async Task StringResultTest()
        {
            var context = new ApiActionContext
            {
                HttpApiConfig = new HttpApiConfig(),
                RequestMessage = new HttpApiRequestMessage
                {
                    Method = HttpMethod.Post,
                    RequestUri = new Uri("http://www.webapi.com/")
                },
                ResponseMessage = new HttpResponseMessage(System.Net.HttpStatusCode.OK),
                ApiActionDescriptor = ApiDescriptorCache
                .GetApiActionDescriptor(typeof(IMyApi)
                .GetMethod("StringAsync"))
            };
            context.ResponseMessage.Content = new StringContent("laojiu");

            var attr = new AutoReturnAttribute();
            var result = await ((IApiReturnAttribute)attr).GetTaskResult(context);
            Assert.True(result?.ToString() == "laojiu");
        }
Exemplo n.º 9
0
        /// <summary>
        /// 生成ApiReturnDescriptor
        /// </summary>
        /// <param name="method">方法信息</param>
        /// <returns></returns>
        private static ApiReturnDescriptor GetReturnDescriptor(this MethodInfo method)
        {
            var returnAttribute = method.FindDeclaringAttribute <IApiReturnAttribute>(true);

            if (returnAttribute == null)
            {
                returnAttribute = new AutoReturnAttribute();
            }

            var dataType   = method.ReturnType.GetGenericArguments().FirstOrDefault() ?? typeof(object);
            var descriptor = new ApiReturnDescriptor
            {
                Attribute         = returnAttribute,
                ReturnType        = method.ReturnType,
                DataType          = dataType,
                IsITaskDefinition = method.ReturnType.IsGenericParameter && method.ReturnType.GetGenericTypeDefinition() == typeof(ITask <>),
                ITaskCtor         = ApiTask.GetITaskConstructor(dataType),
            };

            return(descriptor);
        }
        public async Task EnsureSuccessStatusCodeTest()
        {
            var context = new TestActionContext(
                httpApi: null,
                httpApiConfig: new HttpApiConfig(),
                apiActionDescriptor: new ApiActionDescriptor(typeof(IMyApi).GetMethod("JsonXmlAsync")));

            context.RequestMessage.RequestUri  = new Uri("http://www.mywebapi.com");
            context.RequestMessage.Method      = HttpMethod.Post;
            context.ResponseMessage.StatusCode = System.Net.HttpStatusCode.InternalServerError;

            var model = new Model();
            var xml   = context.HttpApiConfig.XmlFormatter.Serialize(model, Encoding.UTF8);

            context.ResponseMessage.Content = new StringContent(xml, Encoding.UTF8, "application/xml");

            var attr = new AutoReturnAttribute()
            {
                EnsureSuccessStatusCode = true
            };
            await Assert.ThrowsAsync <HttpStatusFailureException>(() => ((IApiReturnAttribute)attr).GetTaskResult(context));
        }
Exemplo n.º 11
0
        /// <summary>
        /// 生成ApiReturnDescriptor
        /// </summary>
        /// <param name="method">方法信息</param>
        /// <returns></returns>
        private static ApiReturnDescriptor GetReturnDescriptor(this MethodInfo method)
        {
            var returnAttribute = method.FindDeclaringAttribute <IApiReturnAttribute>(true);

            if (returnAttribute == null)
            {
                returnAttribute = new AutoReturnAttribute();
            }

            var dataType           = method.ReturnType.GetGenericArguments().FirstOrDefault();
            var dataTypeDefinition = method.ReturnType.GetGenericTypeDefinition();

            var descriptor = new ApiReturnDescriptor
            {
                Attribute         = returnAttribute,
                ReturnType        = method.ReturnType,
                DataType          = new DataTypeDescriptor(dataType),
                IsTaskDefinition  = dataTypeDefinition == typeof(Task <>),
                IsITaskDefinition = dataTypeDefinition == typeof(ITask <>)
            };

            return(descriptor);
        }
Exemplo n.º 12
0
        /// <summary>
        /// 请求Api的返回描述
        /// </summary>
        /// <param name="method">方法信息</param>
        /// <exception cref="ArgumentNullException"></exception>
        public ApiReturnDescriptor(MethodInfo method)
        {
            if (method == null)
            {
                throw new ArgumentNullException(nameof(method));
            }

            var returnAttribute = method.FindDeclaringAttribute <IApiReturnAttribute>(true);

            if (returnAttribute == null)
            {
                returnAttribute = new AutoReturnAttribute();
            }

            var dataType           = method.ReturnType.GetGenericArguments().FirstOrDefault();
            var dataTypeDefinition = method.ReturnType.GetGenericTypeDefinition();


            this.Attribute         = returnAttribute;
            this.ReturnType        = method.ReturnType;
            this.DataType          = new DataTypeDescriptor(dataType);
            this.IsTaskDefinition  = dataTypeDefinition == typeof(Task <>);
            this.IsITaskDefinition = dataTypeDefinition == typeof(ITask <>);
        }