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"
может быть необязательным, но мне нравится всегда добавлять это, чтобы убедиться, что я показываю свои намерения. Это работает для меня каждый раз.
Надеюсь это поможет.