/// <summary> /// 校验约束 /// </summary> /// <param name="orderConditionArguments"></param> /// <param name="orderConditionFilterAttributeList"></param> /// <returns></returns> public virtual OrderConditionArguments ApplyFilter(OrderConditionArguments orderConditionArguments, List <OrderConditionFilterAttribute> orderConditionFilterAttributeList = null) { if (orderConditionArguments == null) { throw new ArgumentNullException(nameof(orderConditionArguments)); } //没有过滤器约束则不进行任何处理 if (orderConditionFilterAttributeList == null || orderConditionFilterAttributeList.Count == 0) { return(orderConditionArguments); } orderConditionFilterAttributeList = orderConditionFilterAttributeList ?? new List <OrderConditionFilterAttribute>(); List <OrderCondition> removeList = new List <OrderCondition>(); foreach (OrderCondition item in orderConditionArguments) { if (!orderConditionFilterAttributeList.Any(f => //若当前被审查元素不满足以下条件,则应被过滤 (f.ColumnName == null || f.ColumnName.Contains(item.ColumnName)) //未定义或者已包含 && (f.AllowOrderMode & item.OrderMode) == item.OrderMode) //允许的匹配模式能够匹配 ) { removeList.Add(item); } } removeList.ForEach(item => orderConditionArguments.Remove(item)); return(orderConditionArguments); }
public async Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } string modelName = bindingContext.BinderModelName; if (string.IsNullOrEmpty(modelName)) { modelName = bindingContext.ModelMetadata.Name; } ValueProviderResult valueProviderResult = bindingContext.ValueProvider.GetValue(modelName); if (valueProviderResult == ValueProviderResult.None) { await Task.CompletedTask; return; } bindingContext.ModelState.SetModelValue(modelName, valueProviderResult); string requestString = valueProviderResult.FirstValue; if (string.IsNullOrEmpty(requestString)) { await Task.CompletedTask; return; } if (!requestString.StartsWith("[")) { requestString = $"[{requestString}]"; } OrderConditionArguments orderConditionArguments = JsonConvert.DeserializeObject(requestString, bindingContext.ModelType) as OrderConditionArguments; try { IEnumerable <OrderConditionFilterAttribute> orderConditionFilterAttribute = ((DefaultModelMetadata)bindingContext.ModelMetadata).Attributes.ParameterAttributes .Where(attr => attr.GetType() == typeof(OrderConditionFilterAttribute)).Select(attr => attr as OrderConditionFilterAttribute); OrderConditionArgumentsInterpreter orderConditionArgumentsInterpret = new OrderConditionArgumentsInterpreter(); orderConditionArguments = orderConditionArgumentsInterpret.ApplyFilter(orderConditionArguments, orderConditionFilterAttribute.ToList()); } catch (Exception ex) { bindingContext.ModelState.TryAddModelError(bindingContext.ModelName, ex.Message); await Task.CompletedTask; return; } bindingContext.Result = ModelBindingResult.Success(orderConditionArguments); await Task.CompletedTask; return; }