Я уже пробовал это , но я не думаю, что это мой случай. Это тоже не работает.
Я использую ASP.NET Core 2 Web API.Я только что создал фиктивный переплет модели (что сейчас не имеет значения):
public class SanitizeModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
var modelName = bindingContext.ModelName;
return Task.CompletedTask;
}
}
Теперь у меня есть модель.Вот этот:
public class UserRegistrationInfo
{
public string Email { get; set; }
[ModelBinder(BinderType = typeof(SanitizeModelBinder))]
public string Password { get; set; }
}
И метод действия:
[AllowAnonymous]
[HttpPost("register")]
public async Task<IActionResult> RegisterAsync([FromBody] UserRegistrationInfo registrationInfo)
{
var validationResult = validateEmailPassword(registrationInfo.Email, registrationInfo.Password);
if (validationResult != null)
{
return validationResult;
}
var user = await _authenticationService.RegisterAsync(registrationInfo.Email, registrationInfo.Password);
if (user == null)
{
return StatusCode(StatusCodes.Status500InternalServerError, "Couldn't save the user.");
}
else
{
return Ok(user);
}
}
Если я сделаю почтовый запрос от клиента, моя привязка пользовательской модели не будет запущена, и выполнение продолжится вметод действия.
То, что я пробовал:
Применение атрибута ModelBinder
ко всему объекту модели:
[ModelBinder(BinderType = typeof(SanitizeModelBinder))]
public class UserRegistrationInfo
{
public string Email { get; set; }
public string Password { get; set; }
}
Это работает,но для всего объекта, и я не хочу этого.Я хочу, чтобы механизм связывания модели по умолчанию выполнял свою работу, а затем применил свой пользовательский механизм связывания модели только к определенным свойствам.
Я прочитал здесь , что это ошибка FromBody
, поэтому яудалил его из метода действия.Это также не работает.
Я пытался изменить атрибут ModelBinder
для BindProperty
здесь:
public class UserRegistrationInfo
{
public string Email { get; set; }
[BindProperty(BinderType = typeof(SanitizeModelBinder))]
public string Password { get; set; }
}
Но это не работает.
Весьма разочаровывает то, что то, что должно быть простым, оказывается довольно громоздким, а информация, разбросанная по нескольким блогам и проблемам GitHub, не помогает вообще.Поэтому, пожалуйста, если вы можете мне помочь, это было бы очень признательно.