using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.ModelBinding; using System; using System.Linq; using System.Threading.Tasks; using System.Web; namespace WalkingTec.Mvvm.Mvc.Binders { /// /// StringIgnoreLTGTBinder /// 忽略客户端提交的 <及>字符 /// public class StringIgnoreLTGTBinder : IModelBinder { /// /// BindModelAsync /// /// /// public Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } var modelName = bindingContext.ModelName; if (string.IsNullOrEmpty(modelName)) { bindingContext.Result = ModelBindingResult.Success(null); return Task.CompletedTask; } var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName); if (valueProviderResult == ValueProviderResult.None) { return Task.CompletedTask; } bindingContext.ModelState.SetModelValue(modelName, valueProviderResult); var value = valueProviderResult.FirstValue; var actDescriptor = bindingContext.ActionContext.ActionDescriptor as ControllerActionDescriptor; var count = actDescriptor .MethodInfo .CustomAttributes .Where(x => x.AttributeType == typeof(StringNeedLTGTAttribute)).Count(); if (count == 0) { value = HttpUtility.HtmlEncode(value); } bindingContext.Result = ModelBindingResult.Success(value); return Task.CompletedTask; } } }