如何在 MVC 的控制器级别使用 ValidateAntiForgeryToken?
How to use ValidateAntiForgeryToken at controller level in MVC?
我有 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 http://localhost/search 时,我不确定 Index
操作方法将如何接收伪造令牌?现在我收到错误 Bad Request
因为请求中没有包含令牌。
您需要在视图中包含防伪令牌。
@using (Html.BeginForm("Save", "Search", FormMethod.Post))
{
@Html.AntiForgeryToken()
// Rest of html
}
这样当您执行 post 时,防伪令牌随请求一起提交。
防伪助手的局限性
It only works with POST requests, not GET requests. Arguably this isn’t a limitation, because under the normal HTTP conventions, you shouldn’t be using GET requests for anything other than read-only operations.
所以它在控制器级别没有用。
ASP.NET核心
[ValidateAntiforgeryToken]
控制器有限制。
https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery?view=aspnetcore-2.1
ASP.NET Core doesn't support adding antiforgery tokens to GET requests automatically.
[AutoValidateAntiforgeryToken]
改进了控制器级别的支持
This attribute works identically to the ValidateAntiForgeryToken attribute, except that it doesn't require tokens for requests made using the following HTTP methods:
- GET
- HEAD
- OPTIONS
- TRACE
我有 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 http://localhost/search 时,我不确定 Index
操作方法将如何接收伪造令牌?现在我收到错误 Bad Request
因为请求中没有包含令牌。
您需要在视图中包含防伪令牌。
@using (Html.BeginForm("Save", "Search", FormMethod.Post))
{
@Html.AntiForgeryToken()
// Rest of html
}
这样当您执行 post 时,防伪令牌随请求一起提交。
防伪助手的局限性
It only works with POST requests, not GET requests. Arguably this isn’t a limitation, because under the normal HTTP conventions, you shouldn’t be using GET requests for anything other than read-only operations.
所以它在控制器级别没有用。
ASP.NET核心
[ValidateAntiforgeryToken]
控制器有限制。
https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery?view=aspnetcore-2.1
ASP.NET Core doesn't support adding antiforgery tokens to GET requests automatically.
[AutoValidateAntiforgeryToken]
This attribute works identically to the ValidateAntiForgeryToken attribute, except that it doesn't require tokens for requests made using the following HTTP methods:
- GET
- HEAD
- OPTIONS
- TRACE