我有ASP.NET Core应用程序。到目前为止,我一直在所有ValidateAntiForgeryToken
操作方法上使用POST
属性。
现在我想在控制器级别使用ValidateAntiForgeryToken
,以便它可以处理POST
和GET
方法。
以下是样本控制器
[ValidateAntiForgeryToken]
public class SearchController : Controller
{
public SearchController()
{
}
[HttpGet]
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Save(MyModel model)
{
}
}
当用户访问网址http://localhost/search时,我不确定Index
操作方法将如何接收forgerytoken?现在我收到错误Bad Request
,因为请求中没有包含令牌。
答案 0 :(得分:7)
反伪造助手的限制
它仅适用于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方法发出的请求的标记:
- GET
- HEAD
- OPTIONS
- TRACE
答案 1 :(得分:0)
您需要在视图中包含防伪标记。
@using (Html.BeginForm("Save", "Search", FormMethod.Post))
{
@Html.AntiForgeryToken()
// Rest of html
}
这样,当您发布帖子时,防伪标记随后会与请求一起提交。