private IUrlParamsMapper GetInferredTaxonFilterMapper(ControllerBase controller, string actionName) { var actionDescriptor = new ReflectedControllerDescriptor(controller.GetType()).FindAction(controller.ControllerContext, actionName); if (actionDescriptor == null || actionDescriptor.GetParameters().Length == 0) { return(null); } IUrlParamsMapper result = null; if (actionDescriptor.GetParameters()[0].ParameterType == typeof(ITaxon)) { var taxonParamName = actionDescriptor.GetParameters()[0].ParameterName; if (actionDescriptor.GetParameters()[1].ParameterType == typeof(int?)) { var pageParamName = actionDescriptor.GetParameters()[1].ParameterName; result = new CustomActionParamsMapper(controller, () => "/{" + taxonParamName + ":category,tag}/{" + pageParamName + "}", actionName); } result = result.SetLast(new CustomActionParamsMapper(controller, () => "/{" + taxonParamName + ":category,tag}", actionName)); } return(result); }
private IUrlParamsMapper GetInferredTaxonFilterMapper(ControllerBase controller, string actionName) { var actionDescriptor = new ReflectedControllerDescriptor(controller.GetType()).FindAction(controller.ControllerContext, actionName); if (actionDescriptor == null || actionDescriptor.GetParameters().Length == 0) { return(null); } var contentType = GetModelProperty(controller, "ContentType") as Type; if (contentType == null && controller is IDynamicContentWidget) { var dynamicType = controller.GetDynamicContentType(); if (dynamicType != null) { contentType = TypeResolutionService.ResolveType(dynamicType.GetFullTypeName()); } } ISet <Guid> taxonomiesForType = null; if (contentType != null) { var properties = TypeDescriptor.GetProperties(contentType); taxonomiesForType = properties.OfType <TaxonomyPropertyDescriptor>().Select(x => x.TaxonomyId).ToHashSet(); } if (taxonomiesForType != null && taxonomiesForType.Count == 0) { return(null); } IUrlParamsMapper result = null; if (actionDescriptor.GetParameters()[0].ParameterType == typeof(ITaxon)) { string routeTemplate = GenerateRouteTemplate(taxonomiesForType); var taxonParamName = actionDescriptor.GetParameters()[0].ParameterName; if (actionDescriptor.GetParameters()[1].ParameterType == typeof(int?)) { var pageParamName = actionDescriptor.GetParameters()[1].ParameterName; var urlParamNames = new string[] { FeatherActionInvoker.TaxonNamedParamter, FeatherActionInvoker.PagingNamedParameter }; result = new CustomActionParamsMapper(controller, () => "/{" + taxonParamName + ":" + routeTemplate + "}/{" + pageParamName + "}", actionName, urlParamNames); } var urlTaxonParamNames = new string[] { FeatherActionInvoker.TaxonNamedParamter }; result = result.SetLast(new CustomActionParamsMapper(controller, () => "/{" + taxonParamName + ":" + routeTemplate + "}", actionName, urlTaxonParamNames)); } return(result); }
private IUrlParamsMapper GetInferredTaxonFilterMapper(ControllerBase controller, string actionName) { var actionDescriptor = new ReflectedControllerDescriptor(controller.GetType()).FindAction(controller.ControllerContext, actionName); if (actionDescriptor == null || actionDescriptor.GetParameters().Length == 0) return null; IUrlParamsMapper result = null; if (actionDescriptor.GetParameters()[0].ParameterType == typeof(ITaxon)) { var taxonParamName = actionDescriptor.GetParameters()[0].ParameterName; if (actionDescriptor.GetParameters()[1].ParameterType == typeof(int?)) { var pageParamName = actionDescriptor.GetParameters()[1].ParameterName; result = new CustomActionParamsMapper(controller, () => "/{" + taxonParamName + ":category,tag}/{" + pageParamName + "}", actionName); } result = result.SetLast(new CustomActionParamsMapper(controller, () => "/{" + taxonParamName + ":category,tag}", actionName)); } return result; }