У меня есть ViewComponent на странице индекса, которая создает сообщение на другой странице LogTransaction
. Когда я отправляю сообщение на страницу LogTransaction, она возвращает 400. Я знаю, что страница найдена, потому что когда я делаю GET-запрос к LogTransaction, она работает отлично. Но всякий раз, когда я пытаюсь POST к нему, он возвращает 400.
Default.cshtml для ViewComponent, содержащийся на localhost: 5001 / Index:
@using BudgetTracker.BudgetSquirrel.Web.Pages
@model BudgetViewModel
...
<form action="/LogTransaction" method="post">
<!-- Inputs Here -->
<button type="submit">Save</button>
</form>
LogTransaction.cshtml.cs
namespace BudgetTracker.BudgetSquirrel.Web.Pages
{
public class LogTransactionModel : BasePageModel // extends PageModel
{
public void OnGet()
{}
public IActionResult OnPost()
{
Console.WriteLine("Hi");
return Page();
}
}
}
LogTransaction.cshtml
@page
@model BudgetTracker.BudgetSquirrel.Web.Pages.LogTransactionModel
@{
ViewData["Title"] = "LogTransaction";
}
Когда я нажимаю кнопку Сохранить, я получаю 400 на запрос POST в / LogTransaction. Я знаю, что он находит страницу, потому что я могу сделать успешный запрос GET к / LogTransaction. Это просто отправка запросов, которые не работают.
Редактировать: Решение найдено
У меня не было ввода токена CSRF в форме. Вы можете вставить его вручную или использовать помощник asp-страницы в форме вместо действия. Этот помощник автоматически вставляет входные данные токена CSRF