DOMException содержит детали, которые не всегда видны . Поймай свое DOMException и обязательно запиши сообщение в консоль. Как правило, это будет гораздо более информативным. В моем случае сообщение «Ошибка регистрации - разрешение отклонено» напомнило мне, что я заблокировал все уведомления в настройках Chrome.
public class TrimModelBinder : DefaultModelBinder
{
protected override void SetProperty(ControllerContext controllerContext,
ModelBindingContext bindingContext,
System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
{
if (propertyDescriptor.PropertyType == typeof(string))
{
var stringValue = (string)value;
if (!string.IsNullOrWhiteSpace(stringValue))
{
value = stringValue.Trim();
}
else
{
value = null;
}
}
base.SetProperty(controllerContext, bindingContext,
propertyDescriptor, value);
}
}
Как насчет этого кода?
ModelBinders.Binders.DefaultBinder = new TrimModelBinder();
Установить событие global.asax Application_Start.
Я отправил это в другом потоке. В ядре asp.net 2, я вошел в другое направление. Я использовал фильтр действия вместо этого. В этом случае разработчик может или установить его глобально или использовать в качестве атрибута для действий, он хочет применить строковую обрезку. Этот код бежит за образцовой привязкой, произошел, и это может обновить значения в объекте модели.
Вот мой код, сначала создайте фильтр действия:
public class TrimInputStringsAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
foreach (var arg in context.ActionArguments)
{
if (arg.Value is string)
{
string val = arg.Value as string;
if (!string.IsNullOrEmpty(val))
{
context.ActionArguments[arg.Key] = val.Trim();
}
continue;
}
Type argType = arg.Value.GetType();
if (!argType.IsClass)
{
continue;
}
TrimAllStringsInObject(arg.Value, argType);
}
}
private void TrimAllStringsInObject(object arg, Type argType)
{
var stringProperties = argType.GetProperties()
.Where(p => p.PropertyType == typeof(string));
foreach (var stringProperty in stringProperties)
{
string currentValue = stringProperty.GetValue(arg, null) as string;
if (!string.IsNullOrEmpty(currentValue))
{
stringProperty.SetValue(arg, currentValue.Trim(), null);
}
}
}
}
, Чтобы использовать его, или зарегистрируйтесь как глобальный фильтр или украсить Ваши действия атрибутом TrimInputStrings.
[TrimInputStrings]
public IActionResult Register(RegisterViewModel registerModel)
{
// Some business logic...
return Ok();
}