internal IRestMethodExecutor Create(RestControllerMethodInfo info) { if (info.HasContentParameter) { return(_withContentExecutor); } else { return(_withoutContentExecutor); } }
protected override object ExecuteAnonymousMethod(RestControllerMethodInfo info, RestServerRequest request, ParsedUri requestUri) { var instantiator = InstanceCreatorCache.Default.GetCreator(info.MethodInfo.DeclaringType); object[] parameters; try { parameters = info.GetParametersFromUri(requestUri).ToArray(); } catch (FormatException) { return(_responseFactory.CreateBadRequest()); } return(info.MethodInfo.Invoke( instantiator.Create(info.MethodInfo.DeclaringType, info.ControllerConstructorArgs()), parameters)); }
public async Task <IRestResponse> ExecuteMethodAsync(RestControllerMethodInfo info, RestServerRequest request, ParsedUri requestUri) { var methodInvokeResult = ExecuteAnonymousMethod(info, request, requestUri); switch (info.ReturnTypeWrapper) { case RestControllerMethodInfo.TypeWrapper.None: return(await Task.FromResult((IRestResponse)methodInvokeResult)); case RestControllerMethodInfo.TypeWrapper.AsyncOperation: return(await ConvertToTask((dynamic)methodInvokeResult)); case RestControllerMethodInfo.TypeWrapper.Task: return(await(dynamic) methodInvokeResult); } throw new Exception($"ReturnTypeWrapper of type {info.ReturnTypeWrapper} not known."); }
protected override object ExecuteAnonymousMethod(RestControllerMethodInfo info, RestServerRequest request, ParsedUri requestUri) { var instantiator = InstanceCreatorCache.Default.GetCreator(info.MethodInfo.DeclaringType); object contentObj = null; try { if (request.HttpServerRequest.Content != null) { contentObj = _contentSerializer.FromContent( request.ContentEncoding.GetString(request.HttpServerRequest.Content), request.ContentMediaType, info.ContentParameterType); } } catch (JsonReaderException) { return(_responseFactory.CreateBadRequest()); } catch (InvalidOperationException) { return(_responseFactory.CreateBadRequest()); } object[] parameters = null; try { parameters = info.GetParametersFromUri(requestUri).Concat(new[] { contentObj }).ToArray(); } catch (FormatException) { return(_responseFactory.CreateBadRequest()); } return(info.MethodInfo.Invoke( instantiator.Create(info.MethodInfo.DeclaringType, info.ControllerConstructorArgs()), parameters)); }
protected abstract object ExecuteAnonymousMethod(RestControllerMethodInfo info, RestServerRequest request, ParsedUri requestUri);