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