Установите AntiForgeryToken для перенаправления на метод HttpGet в C # - PullRequest
0 голосов
/ 05 декабря 2018

Я хочу проверить CSRF в моем веб-приложении, используя атрибут [ValidateAntiForgeryToken].Дело в том, что у меня есть метод GET, который изменяет данные, поэтому он должен быть POST.Но кроме отправки в этот метод действия в соответствующей форме, существует несколько перенаправлений в этот метод, поэтому я не могу изменить его на метод POST.Насколько я знаю, [ValidateAntiForgeryToken] не работает для методов GET.Есть ли другой способ проверки метода GET или перенаправления внутри кода на метод POST без использования формы?

Мой метод действия выглядит примерно так:

public ActionResult SomeAction(SomeModel model)
{
    // changes are made in database!!

    return View("View", model);
}

И это действиеметод перенаправляется из другого метода действия:

public ActionResult SomeOtherAction()
{
    return RedirectToAction("SomeAction", "Controller");
}

Я хотел бы изменить первое действие на:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SomeAction(SomeModel model)
{
    // changes are made in database!!

    return View("View", model);
}

и добавить @ Html.AntiForgeryToken в соответствующем представлении.Но тогда перенаправление во втором действии больше не будет работать.Кто-нибудь знает выход из этого?

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете вернуть метод someAction ...

 public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        [HttpGet]
        [ValidateAntiForgeryToken]
        public ActionResult SomeOtherAction()
        {
            return SomeAction();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult SomeAction()
        {
            return View("SomeAction");
        }
    }

Index.cshtml

@using (Html.BeginForm("SomeOtherAction", "Home", FormMethod.Get))
{
    @Html.AntiForgeryToken();
    <button type="submit">Click Me</button>
}
...