Это геттер HttpRequest.Params
создает это исключение.Этот метод получения в основном создает и возвращает коллекцию пар ключ / значение, которая является агрегацией коллекций QueryString, Form, Cookies и ServerVariables в указанном порядке.Теперь важно то, что когда вы используете этот метод получения, он всегда будет выполнять проверку запроса, и это независимо от того, использовали ли вы атрибут [AllowHtml]
для какого-либо свойства модели или если вы украсили действие контроллера атрибутом [ValidateInput(false)]
и отключили все входные данныеvalidation.
Так что на самом деле это не ошибка в атрибуте AllowHtml
.Именно так создается свойство Params
.
Как упомянул @Adam в своем ответе, вам следует избегать ручного доступа к значениям запроса.Вам следует использовать поставщиков значений, которые принимают во внимание такие вещи, как отключенная проверка запросов для некоторых полей.
Поэтому просто добавьте другое свойство в модель представления:
public class ArticleModel: BaseModel
{
[StringLength(8000, ErrorMessage = "Long description must be in 8000 characters or less")]
[AllowHtml]
public string LongDescription { get; set; }
public string Button { get; set; }
}
и затем в действие контроллера:
[HttpPost]
public ActionResult AddEdit(ArticleModel model)
{
string buttonName = model.Button;
if (buttonName == "Cancel")
{
return RedirectToAction("Index");
}
// something failed
if (!ModelState.IsValid)
{
}
// Update the articles
}