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);
                    }
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
            }
        }