Мое приложение MVC5 сканируется / спамится, и я получаю тысячи исключений в своих журналах.Как я могу решить эту проблему?
Вот моя модель:
public class MyModel
{
public bool IsRememberMe { get; set; }
}
Вот мой взгляд:
@Html.CheckBoxFor(m => m.IsRememberMe)
Вот мой поступок:
[HtmlPost]
public ActionResult MyAction(MyModel model)
{
if (ModelState.IsValid)
{
// Do work
}
return View(model);
}
Когда спамер отправляет вручную, значение, такое как «IsRememberMe = foo» в POST, ModelState.IsValid==false
, как ожидается, и model.IsRememberMe==false
, как ожидается.Однако при рендеринге результирующего представления Html.CheckBoxFor(m => m.IsRememberMe)
выдает исключение:
System.InvalidOperationException: преобразование параметра из типа 'System.String' в тип 'System.Boolean' не выполнено.
Внутри контроллера, если я добавлю:
string value = ModelState["IsRememberMe"].Value.AttemptedValue;
, тогда value
равно foo
(входное значение).
Обратите внимание, что в нормальных условиях всеработает правильно.
Похоже, Html.CheckBoxFor()
извлекает значение из ModelState
, а не model.IsRememberMe
.
Как лучше всего решить эту проблему?
Обновление
Судя по комментариям и отзывам, похоже, что использование данных из ModelState
разработано специально.Я в порядке с этим при нормальных обстоятельствах.
Некоторые комментарии предполагают, что это дубликат.Хотя решение может быть схожим, я утверждаю, что оно не является дубликатом, поскольку проблема, которую я пытаюсь решить, другая: я не пытаюсь активно изменять переданное значение в моем контроллере.
Я пытаюсь предотвратить исключение в MVC, вызванное предоставлением неверных данных.Я публикую свой ответ ниже.