#asp.net-core #razor-pages #antiforgerytoken
#asp.net-ядро #razor-страницы #antiforgerytoken
Вопрос:
Я получал ошибку 400 и сократил код до очень простой записи формы, и все равно получаю эту ошибку.
Это происходит только один раз при первой попытке (т. Е. При первой загрузке страницы, затем вернитесь назад, нажмите кнопку и все ок)
Я обнаружил, что это связано с «защитой от подделки», и если я отключу это, все будет работать идеально в первый раз
<div class="text-center">
<form method="post">
<button id="btnLogin" type="submit" asp-page-handler="BtnSignin">Login</button>
</form>
Выше приведен мой HTML, а ниже — c#:
public async Task<IActionResult> OnPostBtnSignin()
{
return null;
}
(я знаю, что возврат null не идеален, но для моей отладки он подтверждает, получаю ли я ошибку 400 или нет)
если я опубликую (в aws lambda), при первом нажатии кнопки произойдет ошибка, вернитесь назад, нажмите кнопку, и на этот раз ошибки нет
если я отключу «защиту от подделки», это сработает (пробовал, и это работает в любом случае)
Есть идеи о том, почему? и как это исправить? (без отключения защиты от подделки)
Ответ №1:
Попробуйте добавить @Html.AntiForgeryToken()
в свою форму:
<form method="post">
@Html.AntiForgeryToken()
<button id="btnLogin" type="submit" asp-page-handler="BtnSignin">Login</button>
</form>
Оба <form method="post"></form>
и @Html.AntiForgeryToken()
приведут к добавлению на страницу скрытого поля __RequestVerificationToken.Поэтому, если ваша форма не может добавить __RequestVerificationToken на страницу, вы можете попробовать добавить @Html.AntiForgeryToken()
.