ASP.NET Core

ASP.NET Core Razor Pages POST でエラーコード 400 が出る場合の対応

2020年7月7日

ASP.NET Core Razor Pages でフォーム送信などの POST 時にエラーコード 400 のエラーが発生する場合、cshtml で TagHelpers が追加されていることを確認してください。TagHelpers を追加することでエラーが解消します。

@page
@model App.Areas.XXX.Pages.Posts.CreateModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

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

<h1>Create</h1>
...

なお、TagHelpers を追加することで、<input name="__RequestVerificationToken" type="hidden" ... /> のように、__RequestVerificationToken の含まれる input タグが生成されます。このタグがあることで、ASP.NET Core では POST を受け付けるようになります。

<form method="post">
    ...
    <div class="text-danger validation-summary-valid" data-valmsg-summary="true">
        <ul><li style="display:none"></li></ul>
    </div>
    <div class="form-group">
        <label for="Name">Name</label>
        <input class="form-control" type="text" id="Name" name="Name" value="">
        <span class="text-danger field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span>
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary">Create</button>
    </div>
    <div class="form-group">
        <p>
            <button type="submit" class="btn-link" style="padding:0px;margin:0px;border:0px" formaction="/?handler=SendVerificationEmail">Resend email confirmation</button>
        </p>
    </div>
    <input name="__RequestVerificationToken" type="hidden" value="CfDJ8Bs_TlPhCsBLp_nuP-GilmzMJS4bveJUXp6vizT4MIBIvvHy6Tvr2uJSQUnPYQSzGKJdEFGiXF547ss0k48JWAgur66Nc8FtnrswTE-M5VWjYQl8w9Ro_FH2vTqtm7SUx8sYWuuCsUd40Az0fv-VKXo">
</form>

-ASP.NET Core