public async Task <bool> OnAuthorization(HttpContext context, HttpServerMessageSender sender, string messageId, IEnumerable <IAuthorizationFilter> filters) { foreach (var filter in filters) { var path = HttpUtility.UrlDecode(GetRoutePath(context.Request.Path.ToString())); var serviceRoute = await _serviceRouteProvider.GetRouteByPathRegex(path); if (serviceRoute == null) { serviceRoute = await _serviceRouteProvider.GetLocalRouteByPathRegex(path); } context.Items.Add("route", serviceRoute); var filterContext = new AuthorizationFilterContext { Path = path, Context = context, Route = serviceRoute }; await filter.OnAuthorization(filterContext); if (filterContext.Result != null) { await sender.SendAndFlushAsync(new TransportMessage(messageId, filterContext.Result)); return(false); } } return(true); }
public async Task OnActionExecuting(ActionExecutingContext filterContext) { var serviceEntry = _serviceEntryLocate.Locate(filterContext.Message); if (serviceEntry != null) { var httpMethods = serviceEntry.Methods; if (httpMethods.Count() > 0 && !httpMethods.Any(p => String.Compare(p, filterContext.Context.Request.Method, true) == 0)) { filterContext.Result = new HttpResultMessage <object> { IsSucceed = false, StatusCode = Http405EndpointStatusCode, Message = Http405EndpointDisplayName }; } } else { var serviceRoute = await _serviceRouteProvider.GetLocalRouteByPathRegex(filterContext.Message.RoutePath); var httpMethods = serviceRoute.ServiceDescriptor.HttpMethod(); if (!string.IsNullOrEmpty(httpMethods) && !httpMethods.Contains(filterContext.Context.Request.Method)) { filterContext.Result = new HttpResultMessage <object> { IsSucceed = false, StatusCode = Http405EndpointStatusCode, Message = Http405EndpointDisplayName }; } } }