Example #1
0
        private static bool MatchesActionArguments(this TRoute route, ICollection <Type> actionArguments)
        {
            if (actionArguments == null)
            {
                return(true);
            }

            // When specifying arguments, it must be an action level attribute route with a single action descriptor
            TActionDescriptor actionDescriptor = ((TActionDescriptor[])route.DataTokens[RouteDataTokenKeys.Actions]).Single();

            ICollection <TParameterDescriptor> parameterInfos = actionDescriptor.GetParameters();

            if (parameterInfos.Count() != actionArguments.Count)
            {
                return(false);
            }

            for (int i = 0; i < actionArguments.Count; i++)
            {
                if (actionArguments.ElementAt(i) != parameterInfos.ElementAt(i).ParameterType)
                {
                    return(false);
                }
            }

            return(true);
        }
Example #2
0
        protected void ValidateRoutePrefix(LocalizationCollectionRoute localizationCollectionRoute)
        {
            TActionDescriptor actionDescriptor =
                ((TActionDescriptor[])localizationCollectionRoute.DataTokens[RouteDataTokenKeys.Actions]).First();

            Type controllerType = actionDescriptor.ControllerDescriptor.ControllerType;

            RoutePrefixAttribute routePrefixAttribute =
                controllerType.GetCustomAttributes(true).OfType <RoutePrefixAttribute>().SingleOrDefault();

            if (routePrefixAttribute == null)
            {
                if (!string.IsNullOrEmpty(RoutePrefix) && Configuration.ValidateRoutePrefix)
                {
                    throw new InvalidOperationException(
                              string.Format(
                                  "RoutePrefix is set but Controller '{0}' does not contain any RoutePrefix attributes." +
                                  "Set Configuration.ValidateRoutePrefix to false, if you want to skip validation.", controllerType.FullName));
                }
            }
            else if (string.IsNullOrEmpty(RoutePrefix) && Configuration.UseUntranslatedAttributePrefixes)
            {
                // Use untranslated prefix from attribute
                RoutePrefix = routePrefixAttribute.Prefix;
            }
        }
        static docMember GetMethodDocComment(DocCommentLookup lookup, System.Web.Http.Controllers.HttpActionDescriptor descriptor)
        {
            var methodFullName = descriptor.ControllerDescriptor.ControllerType.FullName + "." + descriptor.ActionName;
            var parameters     = descriptor.GetParameters();

            if (parameters.Count > 0)
            {
                methodFullName += "(" + parameters.Select(d => d.ParameterType.FullName).Aggregate((c, n) => c + "," + n) + ")";
            }

            return(lookup.GetMember("M:" + methodFullName));
        }
Example #4
0
        IEdmOperation?ResolveOperation(IEdmEntityContainer container, ControllerActionDescriptor action)
        {
            if (container.FindOperationImports(action.ActionName).SingleOrDefault() is IEdmOperationImport import)
            {
                return(import.Operation);
            }

            var qualifiedName = container.Namespace + "." + action.ActionName;

            if (Singleton is not null)
            {
                return(EdmModel.FindBoundOperations(qualifiedName, Singleton.EntityType()).SingleOrDefault());
            }

            if (EntitySet is null)
            {
                return(default);
Example #5
0
        private static bool MatchesControllerAndAction(this TRoute route, string controller, string action)
        {
#if ASPNETWEBAPI
            // Controller is only set on controller level attributes
            if (route.DataTokens.ContainsKey(RouteDataTokenKeys.Controller))
            {
                return(((TControllerDescriptor)route.DataTokens[RouteDataTokenKeys.Controller]).ControllerName == controller &&
                       string.IsNullOrEmpty(action));
            }
#else
            // Controller / Action level attributes are distinguished by TargetIsAction
            if (((bool?)route.DataTokens[RouteDataTokenKeys.TargetIsAction]) != true)
            {
                return
                    (((TActionDescriptor[])route.DataTokens[RouteDataTokenKeys.Actions]).First().ControllerDescriptor.ControllerName ==
                     controller && string.IsNullOrEmpty(action));
            }
#endif

            TActionDescriptor httpActionDescriptor = ((TActionDescriptor[])route.DataTokens[RouteDataTokenKeys.Actions]).Single();
            return(httpActionDescriptor.ControllerDescriptor.ControllerName == controller &&
                   httpActionDescriptor.ActionName == action);
        }
Example #6
0
        internal ODataRouteActionType GetActionType(ControllerActionDescriptor action)
        {
            if (EntitySet == null && Singleton == null)
            {
                if (Operation == null)
                {
                    return(ODataRouteActionType.Unknown);
                }
                else if (!Operation.IsBound)
                {
                    return(ODataRouteActionType.UnboundOperation);
                }
            }
            else if (Operation == null)
            {
                if (IsActionOrFunction(EntitySet, Singleton, action.ActionName, GetHttpMethods(action)))
                {
                    return(ODataRouteActionType.Unknown);
                }
                else if (Singleton == null)
                {
                    return(ODataRouteActionType.EntitySet);
                }
                else
                {
                    return(ODataRouteActionType.Singleton);
                }
            }

            if (Operation.IsBound)
            {
                return(ODataRouteActionType.BoundOperation);
            }

            return(ODataRouteActionType.UnboundOperation);
        }
        public new IEnumerable <FilterInfo> GetFilters(System.Web.Http.HttpConfiguration configuration, System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor)
        {
            var filters = base.GetFilters(configuration, actionDescriptor);

            foreach (var actionFilter in filters)
            {
                _kernel.InjectProperties(actionFilter);
            }

            return(filters);
        }
 GetActionRouteFactories(System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor)
 {
     return(actionDescriptor.GetCustomAttributes <IDirectRouteFactory>
                (inherit: true));
 }
        public IEnumerable <FilterInfo> GetFilters(System.Web.Http.HttpConfiguration configuration, System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor)
        {
            var deoFilters = _container.ResolveAll <IApiMendeoFilter>();

            foreach (var f in deoFilters)
            {
                yield return(new FilterInfo(f, FilterScope.Global));
            }
        }
Example #10
0
 GetActionRouteFactories(System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor)
 {
     // inherit route attributes decorated on base class controller's actions
     return(actionDescriptor.GetCustomAttributes <IDirectRouteFactory>(inherit: true));
 }
Example #11
0
 public override Microsoft.OData.Edm.IEdmModel GetModel(Type elementClrType, System.Net.Http.HttpRequestMessage request, System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor)
 {
     return(base.GetModel(elementClrType, request, actionDescriptor));
 }
        /// <summary>
        /// Gets the EDM model for the given type and request.
        /// </summary>
        /// <param name="elementClrType">The CLR type for which to retrieve a model.</param>
        /// <param name="request">The request message used to hold a reference to the model.</param>
        /// <param name="actionDescriptor">The action descriptor for the action being queried.</param>
        /// <returns>
        /// The EDM model for the given type and request.
        /// </returns>
        /// <remarks>This override allows an <see cref="T:System.Web.Http.ApiController"/> that is not a type of
        /// <see cref="T:System.Web.Http.OData.ODataController"/> to set the <see cref="T:Microsoft.Data.Edm.IEdmModel"/>
        /// associated with an OData request as a property on the request. Ultimately, this allows
        /// us to call <see cref="M:System.Net.Http.ODataHttpRequestMessageExtensions.GetNextPageLink(System.Net.Http.HttpRequestMessage)"/></remarks>
        public override IEdmModel GetModel(System.Type elementClrType, HttpRequestMessage request, System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor)
        {
            var model = base.GetModel(elementClrType, request, actionDescriptor);

            //
            // WebApi2 Upgrade:
            //
            //original: request.SetEdmModel(model);
            //updated might be something like: request.ODataProperties().Model....
            //
            // TODO: Evaluate if the above or any of this override is really needed.
            //

            return(model);
        }
Example #13
0
 public static void SetLogContextName(System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor)
 {
     log4net.NDC.Clear();
     log4net.NDC.Push(SetLogContextName(actionDescriptor.ControllerDescriptor.ControllerName, actionDescriptor.ActionName));
 }
Example #14
0
 protected override IReadOnlyList <IDirectRouteFactory> GetActionRouteFactories(System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor)
 {
     return(actionDescriptor.GetCustomAttributes <IDirectRouteFactory>(inherit: true));
 }