From 832bceacb572df84ae73e43c0002ec8f8fcddbe2 Mon Sep 17 00:00:00 2001 From: Harald Wolff Date: Tue, 8 Dec 2020 09:14:26 +0100 Subject: [PATCH] Added defaultResponseFactory mechanism to WebApiController --- ln.http.api/WebApiController.cs | 37 ++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/ln.http.api/WebApiController.cs b/ln.http.api/WebApiController.cs index ea865f3..ad20766 100644 --- a/ln.http.api/WebApiController.cs +++ b/ln.http.api/WebApiController.cs @@ -40,7 +40,9 @@ namespace ln.http.api HttpResponse MapRequest(HttpRequest request, MethodInfo methodInfo) { - MapArguments(request, methodInfo, out object[] arguments); + Func defaultResponseFactory; + + MapArguments(request, methodInfo, out object[] arguments, out defaultResponseFactory); object result = methodInfo.Invoke(this, arguments); @@ -53,13 +55,13 @@ namespace ln.http.api result = json; } - return HttpResponse.OK().Content((JSONValue)result); + return defaultResponseFactory().Content((JSONValue)result); } - return HttpResponse.OK().Content(result.ToString()); + return defaultResponseFactory().Content(result.ToString()); } - void MapArguments(HttpRequest request, MethodInfo methodInfo,out object[] arguments) + void MapArguments(HttpRequest request, MethodInfo methodInfo,out object[] arguments, out Func defaultRepsonseFactory) { ParameterInfo[] parameterInfos = methodInfo.GetParameters(); arguments = new object[parameterInfos.Length]; @@ -95,7 +97,6 @@ namespace ln.http.api throw new BadRequestException(); } else if (Cast.To(value, parameterInfo.ParameterType, out arguments[n])) { - } else if (value is string text) { arguments[n] = TypeDescriptor.GetConverter(parameterInfo.ParameterType).ConvertFromInvariantString(text); @@ -108,6 +109,32 @@ namespace ln.http.api } } } + + switch (request.HttpMethod) + { + case HttpMethod.GET: + if (typeof(void).Equals(methodInfo.ReturnType)) + defaultRepsonseFactory = HttpResponse.NoContent; + else + defaultRepsonseFactory = HttpResponse.OK; + break; + case HttpMethod.POST: + defaultRepsonseFactory = HttpResponse.Created; + break; + case HttpMethod.PUT: + defaultRepsonseFactory = HttpResponse.OK; + break; + case HttpMethod.PATCH: + defaultRepsonseFactory = HttpResponse.OK; + break; + case HttpMethod.DELETE: + defaultRepsonseFactory = HttpResponse.NoContent; + break; + default: + defaultRepsonseFactory = HttpResponse.OK; + break; + } + } bool FindArgumentByName(ArgumentSourceAttribute sourceAttribute, HttpRequest request, JSONValue jsonContent, string parameterName, out object value)