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 GetInferredDetailActionParamsMapper(ControllerBase controller) { var controllerType = controller.GetType(); IUrlParamsMapper result = null; var detailsAction = new ReflectedControllerDescriptor(controllerType).FindAction(controller.ControllerContext, DetailActionParamsMapper.DefaultActionName); if (detailsAction != null) { var contentParam = detailsAction.GetParameters().FirstOrDefault(); if (contentParam != null && contentParam.ParameterType.ImplementsInterface(typeof(IDataItem))) { Type contentType; if (typeof(DynamicContent) == contentParam.ParameterType) { var dynamicContentType = controller.GetDynamicContentType(); contentType = dynamicContentType != null ? TypeResolutionService.ResolveType(dynamicContentType.GetFullTypeName(), throwOnError: false) : null; } else { contentType = contentParam.ParameterType; } if (contentType != null) { var providerNames = this.GetProviderNames(controller, contentType); foreach (var provider in providerNames) { var providerName = provider; result = result.SetLast(new DetailActionParamsMapper(controller, contentType, () => providerName)); } } } } return result; }
private IUrlParamsMapper GetInferredPagingMapper(ControllerBase controller, string actionName) { var actionDescriptor = new ReflectedControllerDescriptor(controller.GetType()).FindAction(controller.ControllerContext, actionName); if (actionDescriptor == null || actionDescriptor.GetParameters().Length == 0 || actionDescriptor.GetParameters()[0].ParameterType != typeof(int?)) return null; return new CustomActionParamsMapper(controller, () => "/{" + actionDescriptor.GetParameters()[0].ParameterName + ":int}", actionName); }
private IUrlParamsMapper GetInferredClassificationFilterMapper(ControllerBase controller, string actionName) { var actionDescriptor = new ReflectedControllerDescriptor(controller.GetType()).FindAction(controller.ControllerContext, actionName); if (actionDescriptor == null || actionDescriptor.GetParameters().Length == 0) return null; return new TaxonomyUrlParamsMapper(controller, new TaxonUrlMapper(new TaxonUrlEvaluatorAdapter())); }