Мне нужен глобальный подход к очистке всех входящих запросов после привязки к модели. sanitizer будет htmlsanitizer.net 6. Я попробовал фильтр действий, который проходит через все свойства входящей модели и очищает все свойства строк. Но я не хочу углубляться в размышления из-за снижения производительности. Затем я перешел к специальным подшивкам моделей, и это показалось мне лучшим вариантом и более чистым. Однако, если я правильно помню, я не могу справиться с ситуациями, когда входящая модель имеет вложенные модели, некоторые свойства которых необходимо очистить. Хотелось бы услышать от вас какие-то подходы или рекомендации. Заранее спасибо
Несколько кода
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Ganss.XSS;
public class HtmlSanitizingBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null) throw new ArgumentNullException(nameof(bindingContext));
var sanitizer = new HtmlSanitizer();
var modelName = bindingContext.ModelName;
var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);
if (valueProviderResult != ValueProviderResult.None)
{
bindingContext.ModelState.SetModelValue(modelName, valueProviderResult);
var value = valueProviderResult.FirstValue;
if (!string.IsNullOrWhiteSpace(value))
{
var sanitizedValue = sanitizer.Sanitize(value);
bindingContext.Result = ModelBindingResult.Success(sanitizedValue);
return Task.CompletedTask;
}
}
return Task.CompletedTask;
}
}
Startup.cs
builder.Services.AddControllers(options =>
{
options.ModelBinderProviders.Insert(0, new CustomModelBinderProvider());
});
public class CustomModelBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
if (context == null) throw new ArgumentNullException(nameof(context));
if (context.Metadata.ModelType == typeof(string))
{
return new HtmlSanitizingBinder();
}
return null;
}
}
Источник: https://stackoverflow.com/questions/781 ... anitizer-g