ValidateAntiForgeryToken в контроллере переопределения

У меня есть три контроллера, но Controller1 унаследован от Controller2, а Controller2 унаследован от Controller3.

Например

public class Controller1 : Controller
{
    [HttpPost]
    [ValidateAntiForgeryToken()]
    public virtual ActionResult Create(MyClass test)
    {
...

public class Controller2 : Controller1
{
...

public class Controller3 : Controller2
{
    [HttpPost]
    [ValidateAntiForgeryToken()]
    public override ActionResult Create(MyClass test)
...

также в Просмотр добавить

@Html.AntiForgeryToken()

когда есть один элемент управления и нет унаследованной хорошей работы, но при использовании метода наследования и переопределения ValidateAntiForgeryToken получает ошибку.

validationAntiforgeryToken недействителен и получает ошибку:

Отсутствует обязательное поле формы защиты от подделки "__RequestVerificationToken".

[HttpAntiForgeryException (0x80004005): Отсутствует обязательное поле формы защиты от подделки «__RequestVerificationToken».]

...

Благодарю.


person khoshghadam    schedule 24.09.2013    source источник


Ответы (1)


Ваша проблема не в вашей иерархии контроллеров, а в том, что у вас нет AntiForgeryToken в запросе (как говорит ошибка).

Для этого добавьте в свое представление (внутри формы) следующее:

@Html.AntiForgeryToken()
person Kenneth    schedule 24.09.2013
comment
Вы уверены, что добавили его в форму? - person Kenneth; 24.09.2013
comment
да, я уверен, что вы можете протестировать, когда у вас есть один контроллер и нет унаследованного от другого контроллера, работающего хорошо, но в унаследованном получайте проверку ошибок - person khoshghadam; 24.09.2013
comment
о, я нахожу проблему. Я использую ajax для публикации и в ajax устанавливаю contentType: '' и datatype: ''. Я меняю параметры буксировки и исправляю ошибку, спасибо за все... - person khoshghadam; 24.09.2013
comment
Да, это было бы проблемой. Если вы используете Ajax, взгляните на этот пост Фила Хаака: haacked.com/archive/2011/10/10/preventing-csrf-with-ajax.aspx - person Kenneth; 24.09.2013