ValidateAntiForgeryToken разрывает страницу

У меня есть веб-приложение ASP .Net Core 1.1 MVC. Когда я добавляю украшение [ValidateAntiForgeryToken] в мои контроллеры Edit/Delete/Create, страницы не загружаются (ошибка HTTP 400). Есть идеи почему? Я где-то читал, что мне нужно добавить соответствующий @HtmlHelper.AntiForgeryToken к моим представлениям, или что-то в этом роде? Но не уверен, где его поставить... Тем не менее, я также читал, что нет необходимости делать это в ASP .Net Core...

Вот пример моего представления Edit для контроллера "Users":

@model InspectionsData.Models.User

@{
    ViewData["Title"] = "Edit";
}

<h2>Edit</h2>

<form asp-action="Edit">
    <div class="form-horizontal">
        <h4>User</h4>
        <hr />
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group" hidden>
            <label asp-for="UserId" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="UserId" class="form-control" />
                <span asp-validation-for="UserId" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group">
            <label asp-for="FirstName" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="FirstName" class="form-control" />
                <span asp-validation-for="FirstName" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group">
            <label asp-for="LastName" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="LastName" class="form-control" />
                <span asp-validation-for="LastName" class="text-danger"></span>
            </div>
        </div>
    </div>
</form>

<div>
    <a asp-action="Index">Back to List</a>
</div>

Спасибо

2 ответа

Да вы правы. Вам больше не нужно вручную помещать AntiForgeryToken в ASP.NET Core.

Form помощник по тегам создает скрытый токен запроса для предотвращения подделки межсайтовых запросов (при использовании с атрибутом [ValidateAntiForgeryToken] в методе действия HTTP Post)

Взято из ASP.NET Core документов

Сказав это, вы уверены, что ваши действия соответствуют POST запрос?

Также указание контроллера также является хорошей идеей.

<form asp-controller="Users" asp-action="Edit">

PS: Добавление кода для ваших методов действий поможет быстрее решить проблему.

Вам нужно изменить объявление формы на что-то вроде следующего.

<form asp-controller="User" 
    asp-action="Edit" method="post" asp-antiforgery="true">

Как вы упомянули, asp-antiforgery="true" может быть необязательным, но мне нравится всегда добавлять это, чтобы убедиться, что я показываю свои намерения. Это работает для меня каждый раз.

Надеюсь это поможет.

Другие вопросы по тегам