private List <object> MapAnnotationsToAttributes(ReflectedMethodInfo scriptMethodInfo) { var annotations = scriptMethodInfo.GetCustomAttributes(typeof(UserAnnotationAttribute), false) .Select(x => ((UserAnnotationAttribute)x).Annotation); return(MapAnnotationsToAttributes(annotations)); }
private ActionModel CreateActionModel(ReflectedMethodInfo scriptMethodInfo) { var clrMethodInfo = MapToActionMethod(scriptMethodInfo); var userAnnotations = scriptMethodInfo.GetCustomAttributes(typeof(UserAnnotationAttribute), false) .Select(x => ((UserAnnotationAttribute)x).Annotation); string actionName = scriptMethodInfo.Name; string magicHttpMethod = null; List <AnnotationDefinition> workSet = new List <AnnotationDefinition>(); var pos = actionName.LastIndexOf('_'); if (pos > 0 && pos < actionName.Length - 1) { magicHttpMethod = actionName.Substring(pos + 1); } foreach (var annotation in userAnnotations) { var loCase = annotation.Name.ToLowerInvariant(); var workAnnotation = annotation; if (loCase == "httpmethod") { if (magicHttpMethod != null) { if (annotation.ParamCount == 0) { // наш случай. actionName = actionName.Substring(0, pos); workAnnotation.Parameters = new[] { new AnnotationParameter() { Name = "Method", RuntimeValue = ValueFactory.Create(magicHttpMethod) } }; } } } workSet.Add(workAnnotation); } var attrList = MapAnnotationsToAttributes(workSet); var annotatedActionName = attrList.OfType <ActionNameAttribute>().FirstOrDefault(); if (annotatedActionName?.Name != null) { actionName = annotatedActionName.Name; } var actionModel = new ActionModel(clrMethodInfo, attrList.AsReadOnly()); actionModel.ActionName = actionName; actionModel.Properties.Add("actionMethod", scriptMethodInfo); foreach (var selector in CreateSelectors(actionModel.Attributes)) { actionModel.Selectors.Add(selector); } return(actionModel); }