public void InvokeAction(ControllerContext context, String actionName) { Requires.NotNull(context, "context"); Requires.NotNull(actionName, "actionName"); MethodInfo method = GetSuitableMethod(context, actionName); if (method != null) { ParameterInfo[] parameters = method.GetParameters(); Object[] parameterValues = GetParameterValues(parameters, context.RouteData); var actionContext = new ActionContext(context, actionName); IAsyncController asyncController = context.Controller as IAsyncController; if ((asyncController != null) && (method.ReturnType.Equals(typeof(void)))) { asyncController.ActionCompleted += DefaultActionInvoker_ActionCompleted; _contextCache.Add(asyncController, actionContext); method.Invoke(context.Controller, parameterValues); } else { IActionResult actionResult = method.Invoke(context.Controller, parameterValues) as IActionResult; if (actionResult != null) { actionResult.Execute(actionContext); } } } }
public bool HandleRequest(IHttpContext context) { EnsureLogger(context.ServerInfo.LoggerFactory); var action = context.ServerInfo.ActionFactory.Create(actionType); var routeContext = new RouteContext(context, GetRouteData(context.Request.Url.AbsolutePath)); IActionResult actionResult = null; switch (context.Request.HttpMethod.ToUpper()) { case "GET": logger.Debug("Dispatching GET request to {0}", action); actionResult = action.Get(routeContext); break; case "POST": logger.Debug("Dispatching POST request to {0}", action); actionResult = action.Post(routeContext); break; } if (actionResult == null) { logger.Info("Action {0} did not handle the request", action); return(false); } logger.Info("Request handled by action {0}, executing result...", action); actionResult.Execute(context); return(true); }
private static void ProcessRequest(EndpointHandler endpointHandler, EndpointHandlerRegister handlerRegister, TcpClient client) { try { NetworkStream requestStream = client.GetStream(); Console.WriteLine($"Nachricht erhalten um: {DateTime.Now} Client: {client.Client.RemoteEndPoint}"); Console.WriteLine("-----------------------------------------------------------------------------"); HttpRequestParser requestParser = new HttpRequestParser(); RequestContext context; context = requestParser.ParseRequestStream(requestStream); Console.WriteLine("-----------------------------------------------------------------------------"); Console.WriteLine(); RouteMatch match = handlerRegister.GetEndPointHandler(context); if (match != null) { IActionResult result = endpointHandler.Invoke(match, client, context); result.Execute(); } else { HttpStatusCodeResult.NotFound(client) .Execute(); } client.Close(); } catch (HttpRequestParserException parserEx) { string parseErrorMessage = $"Ungültiger Request, parsen nicht möglich: {parserEx.Message}"; Console.WriteLine(parseErrorMessage); HttpStatusCodeResult.BadRequest(client, parseErrorMessage) .Execute(); } catch (Exception ex) when(ex is EndPointHandlerException || ex is EndpointHandlerRegisterException) { HttpStatusCodeResult.BadRequest(client, ex.GetFullMessage(verbose: true)) .Execute(); } catch (Exception ex) { Console.WriteLine($"Unerwarteter Fehler: {ex.Message}"); HttpStatusCodeResult.InternalServerError(client) .Execute(); } finally { client.Close(); } }