我有ASP.NET核心应用程序。到目前为止,我一直在使用所有ValidateAntiForgeryToken
动作方法的POST
属性。
现在我想在控制器级别使用ValidateAntiForgeryToken
,因此它可以处理POST
和GET
方法。
下面是样本控制器
[ValidateAntiForgeryToken]
public class SearchController : Controller
{
public SearchController()
{
}
[HttpGet]
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Save(MyModel model)
{
}
}
当用户访问URL http://localhost/search时,我不确定Index
动作方法将如何获得forgerytoken?现在我得到错误Bad Request
,因为请求中没有包含令牌。
反伪造助手的局限性
它仅适用于POST请求,而不适用于GET请求。可以说这不是限制,因为在正常的HTTP约定下,您不应该将GET请求用于除了只读操作之外的任何其他操作。
所以它在控制器级别没用。
ASP.NET核心
控制器上的[ValidateAntiforgeryToken]
有局限性。
https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery?view=aspnetcore-2.1
ASP.NET Core不支持自动将防伪标记添加到GET请求。
[AutoValidateAntiforgeryToken]
改进了控制器级支持
此属性与ValidateAntiForgeryToken属性的工作方式相同,只是它不需要使用以下HTTP方法发出的请求的标记:
- 得到
- 头
- OPTIONS
- 跟踪
您需要在视图中包含防伪标记。
@using (Html.BeginForm("Save", "Search", FormMethod.Post))
{
@Html.AntiForgeryToken()
// Rest of html
}
这样,当您发布帖子时,防伪标记随后会与请求一起提交。