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); }
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)); }
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);
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); }
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)); } }
GetActionRouteFactories(System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor) { // inherit route attributes decorated on base class controller's actions return(actionDescriptor.GetCustomAttributes <IDirectRouteFactory>(inherit: true)); }
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); }
public static void SetLogContextName(System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor) { log4net.NDC.Clear(); log4net.NDC.Push(SetLogContextName(actionDescriptor.ControllerDescriptor.ControllerName, actionDescriptor.ActionName)); }
protected override IReadOnlyList <IDirectRouteFactory> GetActionRouteFactories(System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor) { return(actionDescriptor.GetCustomAttributes <IDirectRouteFactory>(inherit: true)); }