为什么按类型添加AutoValidateAntiForgeryTokenAttribute不起作用?

时间:2018-04-11 12:36:08

标签: c# asp.net-core

在ASP.NET Core中,您可以通过在Startup.csdocs)中包含此行来验证所有非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了解最低限度的回复。

这里发生了什么?

1 个答案:

答案 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>();
}