public IHttpResponse Handle(IHttpRequest request) { var getParams = request.UrlParameters; var postParams = request.FormData; var requestMethod = request.Method.ToString(); var controllerName = string.Empty; var actionName = string.Empty; if (request.Path == DefaultPath) { controllerName = DefaultControllerName; actionName = DefaultActionName; } else { string[] invocationParameters = request.Path.Split('/', StringSplitOptions.RemoveEmptyEntries); if (invocationParameters.Length != 2) { throw new InvalidOperationException("Invalid URL"); } controllerName = invocationParameters[0].CapitalizeFirstLetter() + MvcContext.Get.ControllerSuffix; actionName = invocationParameters[1].CapitalizeFirstLetter(); } var controller = this.GetController(controllerName, request); try { MethodInfo action = this.GetMethod(requestMethod, controller, actionName); if (action == null) { return(new NotFoundResponse()); } PreAuthorizeAttribute authorizationAttribute = action.GetCustomAttributes() .Where(x => x is PreAuthorizeAttribute) .Cast <PreAuthorizeAttribute>() .FirstOrDefault(); if (authorizationAttribute != null && !controller.SessionUser.IsAuthenticated) { throw new UnauthorizedException(UnauthorizedToViewContentMessage); } var actionParameters = this.MapActionParameters(action, getParams, postParams); return(this.PrepareResponse(controller, action, actionParameters)); } catch (UnauthorizedException e) { return(new PreAuthorizeAttribute().GetResponse(e.Message)); } }
public IHttpResponse Handle(IHttpRequest request) { var getParams = request.UrlParameters; var postParams = request.FormData; var requestMethod = request.Method.ToString(); List <string> invocationParameters = request.Path.Split('/', StringSplitOptions.RemoveEmptyEntries).ToList(); if (request.Path == "/") { invocationParameters.Add("home"); invocationParameters.Add("index"); } if (invocationParameters.Count < 2) { throw new InvalidOperationException("Invalid URL"); } var controllerName = invocationParameters[0].CapitalizeFirstLetter() + MvcContext.Get.ControllerSuffix; var actionName = invocationParameters[1].CapitalizeFirstLetter(); var controller = this.GetController(controllerName, request); try { MethodInfo action = this.GetMethod(requestMethod, controller, actionName); if (action == null) { return(new NotFoundResponse()); } PreAuthorizeAttribute validationAttribute = action .GetCustomAttributes() .Where(attr => attr is PreAuthorizeAttribute) .Cast <PreAuthorizeAttribute>() .FirstOrDefault(); if (validationAttribute != null && !controller.User.IsAuthenticated) { return(validationAttribute.GetResponse("The user is not authorized !")); } var actionParameters = this.MapActionParameters(action, getParams, postParams); return(this.PrepareResponse(controller, action, actionParameters)); } catch (UnauthorizedAccessException e) { return(new PreAuthorizeAttribute().GetResponse(e.Message)); } }