private async Task Handle404(HttpContext context, Func <Task> next) { var req = context.Request; var actionContext = CreateActionContext(context); AddAdditionalInformationToContext(context); RequestHandler.RequestInformation res = GetRequestHandler(context); try { var routeData = Manager.RouterManager.GetRouteFor(req.Path, res); var Executer = Manager.GetExecuter(routeData.ModuleName); SetModuleNameInHttpContext(context, routeData.ModuleName); var x = routeData.GetAuthentcationType(res.Method); var auth = Manager.AuthenticationManager.GetAuthenticationByToken(x.Token); auth.HttpContext = context; context.Items[Consts.CONTEXT_ITEM_KEY_AUTH] = auth; if (auth.IsAuthenticated()) { res.ParseAdditionalParameters(routeData.GetQueryString(req.Path)); var actionResult = Executer.InvokeAction(res, routeData, context); context.Response.StatusCode = 200; if (actionResult is ActionResult) { await(actionResult as ActionResult).ExecuteResultAsync(actionContext); } else if (actionResult == null) { return; } else { await context.Response.WriteAsync(JsonConvert.ToString(actionResult)); } } else { context.Response.Redirect(auth.LoginPagePath); } } catch (MethodRuntimeException ex) { context.Response.StatusCode = 406; await context.Response.WriteAsync($"{ex.Message} <b>{ex.RealStackTrace}</b>"); } catch (AuthenticatonNotFoundException ex) { context.Response.StatusCode = 401; await context.Response.WriteAsync($"<div style='color:red;'>Authentication token not found : {ex.MissedToken}</div>"); } catch (Exception ex) { if (ex is MethodRuntimeException) { await context.Response.WriteAsync($"<b>{(ex as MethodRuntimeException).RealStackTrace}</b>"); } context.Response.StatusCode = 418; await context.Response.WriteAsync(ex.Message); //$"{res.ContentType} : {string.Join(" AND ", res.RequestParameters.Select(m => $"{m.Name} - {m.Value}"))} = {res.Method}");//string.Join(",",form.Select(m => $"{m.Key} = {m.Value[0]}"))); } }