Проверка Anti Forgery не работает в MVC 4

Я создал форму входа и некоторые другие контроллеры в mvc4. Я помещаю [ValidateAntiForgeryToken] на контроллеры и @Html.AntiForgeryToken() в каждом представлении. но после авторизации при переходе на другую страницу выдает ошибку

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

мой образец контроллера

 [HttpPost, ActionName("UserLogin")]
    [ValidateAntiForgeryToken]
    [AllowAnonymous]
    public ActionResult UserLogin(FormCollection collection)
    {
        string username = collection["txtUser"].ToString();
        string password = collection["pwd"].ToString();
        string Browser = HttpContext.Request.Browser.Browser;
        if (db.Users.Any(u => u.Email == username && u.Password == password))
        {
            User usr = db.Users.Single(u => u.Email == username && u.Password == password);
            return RedirectToAction("Details","User",usr.Id);
        }
        return HttpNotFound();
    }

и вид

@using(Html.BeginForm("UserLogin","User")){
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
/// .......form elements....//
}

person vivek    schedule 11.03.2014    source источник
comment
В вашей форме на виду. попробуйте добавить этот @using(Html.BeginForm("UserLogin","User", FormMethod.Post)), чтобы убедиться, что он перенаправляет сообщение о действии вашего контроллера   -  person Cybercop    schedule 11.03.2014


Ответы (2)


Я добавил If ModelState.IsValid Then в метод. Это заставило модель работать правильно с проверкой.

@Using Html.BeginForm("request_a_quote", "Furniture_Assembly_Quote", FormMethod.Post, New With {.class = "form-horizontal", .role = "form"})

    @Html.AntiForgeryToken()

    @<text>

        <div Class="row">
                <div Class="col-md-6">
                    <hr />
                    @Html.ValidationSummary("", New With {.class = "text-danger"})



    <HttpPost>
    <AllowAnonymous>
    <ValidateAntiForgeryToken>
    Public Function Request_a_quote(model As RequestViewModel) As ActionResult
        If ModelState.IsValid Then
End If
End Function
person gspotprod    schedule 16.04.2020

RedirectToAction заставляет браузер сделать GET запрос к указанному действию в соответствии с MSDN. Ваш AntiForgeryToken доступен только при отправке формы. Поэтому действие, на которое вы перенаправляете, не может ожидать AntiForgeryToken.

person user2900970    schedule 11.03.2014