在ASP.NET Core中,您可以通过在Startup.cs
(docs)中包含此行来验证所有非GET请求:
services.AddMvc(options => options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute()));
但是,如果您按类型添加过滤器(使用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>());
请参阅https://github.com/davidgruar/GlobalFilterDemo了解最低限度的回复。
这里发生了什么?
答案 0 :(得分:2)
您需要使用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>();
}