Asp.net mvc 如何在MVC中的控制器级别使用ValidateAntiForgeryToken?
我有ASP.NET核心应用程序。到目前为止,我一直在所有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() { }
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操作中。