Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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 mvc 如何在MVC中的控制器级别使用ValidateAntiForgeryToken?_Asp.net Mvc_Asp.net Core_Asp.net Core Mvc_Antiforgerytoken_Coreclr - Fatal编程技术网

Asp.net mvc 如何在MVC中的控制器级别使用ValidateAntiForgeryToken?

Asp.net mvc 如何在MVC中的控制器级别使用ValidateAntiForgeryToken?,asp.net-mvc,asp.net-core,asp.net-core-mvc,antiforgerytoken,coreclr,Asp.net Mvc,Asp.net Core,Asp.net Core Mvc,Antiforgerytoken,Coreclr,我有ASP.NET核心应用程序。到目前为止,我一直在所有POST操作方法上使用ValidateAntiForgeryToken属性 现在我正在考虑在控制器级别使用ValidateAntiForgeryToken,这样它就可以同时处理POST和GET方法 下面是示例控制器 [ValidateAntiForgeryToken] public class SearchController : Controller { public SearchController() { }

我有ASP.NET核心应用程序。到目前为止,我一直在所有
POST
操作方法上使用
ValidateAntiForgeryToken
属性

现在我正在考虑在控制器级别使用
ValidateAntiForgeryToken
,这样它就可以同时处理
POST
GET
方法

下面是示例控制器

[ValidateAntiForgeryToken]
public class SearchController : Controller
{
    public SearchController()
    {
    }

    [HttpGet]
    public IActionResult Index()
    {           
        return View();
    }      

    [HttpPost]
    public IActionResult Save(MyModel model)
    {

    }
}


当用户访问URL时,我不确定
Index
action方法将如何接收伪造令牌?现在我收到错误
错误请求
,因为请求中没有包含令牌。

您需要在视图中包含防伪令牌

@using (Html.BeginForm("Save", "Search", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    // Rest of html
}
这样,当您发布帖子时,就会将防伪令牌与请求一起提交。

From

防伪助手的限制

它只适用于POST请求,不适用于GET请求。可以说,这不是一个限制,因为在正常的HTTP约定下,除了只读操作之外,不应该使用GET请求

因此,它在控制器级别没有用处

ASP.NET核心

控制器上的
[ValidateAntiforgeryToken]
有限制

ASP.NET Core不支持添加反伪造令牌以自动获取请求

通过
[AutoValidateAntiforgeryToken]

此属性的工作原理与ValidateAntiForgeryToken属性相同,只是它不需要使用以下HTTP方法进行请求的令牌:

  • 得到
  • 选择权
  • 痕迹

我的问题与邮报无关。关于GETI,我认为它仍然有用。当您将其添加到控制器级别时,您不需要将其添加到所有post操作中(代码行数较少),也不会忘记将其添加到某些post操作中。