Как очистить строковые поля входящих моделей в .net 6 с помощью HtmlSanitizer глобально?C#

Место общения программистов C#
Ответить
Гость
 Как очистить строковые поля входящих моделей в .net 6 с помощью HtmlSanitizer глобально?

Сообщение Гость »

Мне нужен глобальный подход к очистке всех входящих запросов после привязки к модели. 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»