Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core mvc ValidateAntiForgeryToken断开页面_Asp.net Core Mvc_Antiforgerytoken_Asp.net Core 1.1 - Fatal编程技术网

Asp.net core mvc ValidateAntiForgeryToken断开页面

Asp.net core mvc ValidateAntiForgeryToken断开页面,asp.net-core-mvc,antiforgerytoken,asp.net-core-1.1,Asp.net Core Mvc,Antiforgerytoken,Asp.net Core 1.1,我有一个ASP.NETCore1.1MVCWeb应用程序。当我将[ValidateAntiForgeryToken]装饰添加到编辑/删除/创建控制器时,页面不会加载( HTTP 400错误)。你知道为什么吗?我在某个地方读到,我必须在我的视图中添加一个相应的@HtmlHelper.AntiForgeryToken,或者类似的东西?但不知道放在哪里。。。然而,我也读到过,在ASP.Net核心中不需要做任何事情 以下是“用户”控制器的编辑视图示例: @model InspectionsData.Mo

我有一个ASP.NETCore1.1MVCWeb应用程序。当我将[ValidateAntiForgeryToken]装饰添加到编辑/删除/创建控制器时,页面不会加载( HTTP 400错误)。你知道为什么吗?我在某个地方读到,我必须在我的视图中添加一个相应的@HtmlHelper.AntiForgeryToken,或者类似的东西?但不知道放在哪里。。。然而,我也读到过,在ASP.Net核心中不需要做任何事情

以下是“用户”控制器的编辑视图示例:

@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>
@model-InspectionsData.Models.User
@{
ViewData[“标题”]=“编辑”;
}
编辑
使用者

返回列表

谢谢

您需要将表单声明更改为以下内容

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

正如您所提到的,
asp antiforgery=“true”
可能是可选的,但我喜欢总是添加它,以确保我显示出我的意图。我每次都这样


希望这有帮助。

是的,你是对的。您不再需要在ASP.NET Core中手动放置AntiForgeryToken

表单
标记帮助程序生成一个隐藏的请求验证令牌,用于 防止跨站点请求伪造(与 HTTP Post操作方法中的[ValidateAntiForgeryToken]属性

取自ASP.NET核心

话虽如此,您确定您的操作符合
POST
请求吗

另外,指定控制器也是一个好主意

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


附言:为您的操作方法添加代码将有助于更快地解决问题。

您将属性放在了哪里?因为如果你把它放在返回表单的动作上,你会得到错误。它必须位于表单POST触发的操作上。您能将控制器代码添加到问题中吗?