Autofac注册了两次AuthorizationFilter调用
本文关键字:两次 AuthorizationFilter 调用 注册 Autofac | 更新日期: 2023-09-27 18:25:17
嗨,我有一个授权过滤器,它是使用Autofac对WebApi的支持创建的。总结如下:
public class ApplicationTokenValidatorAttribute : IAutofacAuthorizationFilter
{
//...
/// <summary>
/// Default constructor for ApplicationTokenValidatorAttribute
/// </summary>
/// <param name="tenancyClient">Tenancy service used to resolve application key checks and populate tenancy object on valid controllers</param>
/// <param name="commonServices">Provides access to commonly used services, including logging and performance tracing</param>
public ApplicationTokenValidatorAttribute(ITenancyClient tenancyClient, ICommonServices commonServices)
{
_tenancyClient = tenancyClient;
_commonServices = commonServices;
}
/// <summary>
/// Pass/fails authentication, based on whether you provide a valid application key in the http headers of the request
/// </summary>
/// <param name="actionContext">Action filter context</param>
public void OnAuthorization(HttpActionContext actionContext)
{
//...
}
我不认为过滤器中的实际代码很重要,但如果有人不这么认为,那么我可以检查它并粘贴更多。
我使用这个autofac代码注册它
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
builder.Register(c =>
new ApplicationTokenValidatorAttribute(
c.Resolve<ITenancyClient>(),
c.Resolve<ICommonServices>()))
.AsWebApiAuthorizationFilterFor<TenantAwareApiController>()
.InstancePerApiRequest();
我认为是在https://code.google.com/p/autofac/wiki/WebApiIntegration.
然而,如果我这样做,它会为每个请求调用两次。
如果我注释掉行
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
那么过滤器只被调用一次。有人能解释一下吗?我需要这条线吗?我不愿意排除文件中特别列出的声明,但它似乎是问题的根源。
欢呼,
p
行:
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
将注册实现CCD_ 2接口的任何内容。所以严格来说,你不应该需要第二行。
第二行只是重新注册Autofac在上面一行中已经自动执行的操作。所以,去掉第二行。