在ASP.NET Core中,您可以通过在Startup.cs(docs)中包含此行来验证所有非GET请求:
services.AddMvc(options => options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute()));
Run Code Online (Sandbox Code Playgroud)
但是,如果按类型添加过滤器(使用typeof或使用泛型Add<T>方法),则验证似乎不起作用:
// Doesn't work
services.AddMvc(options => options.Filters.Add(typeof(AutoValidateAntiforgeryTokenAttribute));
// Doesn't work either
services.AddMvc(options => options.Filters.Add<AutoValidateAntiforgeryTokenAttribute>());
Run Code Online (Sandbox Code Playgroud)
请参阅https://github.com/davidgruar/GlobalFilterDemo以获得最小的repro.
这里发生了什么?
您需要向 DI 容器注册类型。我刚刚尝试过并且有效。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
// This works
//options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
// These variants don't work
//options.Filters.Add<AutoValidateAntiforgeryTokenAttribute>();
options.Filters.Add(typeof(AutoValidateAntiforgeryTokenAttribute));
});
services.AddScoped<AutoValidateAntiforgeryTokenAttribute>();
}
Run Code Online (Sandbox Code Playgroud)