gpt4 book ai didi

c# - Autofac 注册 AuthorizationFilter 调用两次

转载 作者:行者123 更新时间:2023-12-03 18:39:08 27 4
gpt4 key购买 nike

嗨,我有一个授权过滤器,它是使用 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);

那么过滤器只被调用一次,正如预期的那样。任何人都可以对此有所了解吗?我需要这条线吗?我不愿意排除文档中特别列出的声明,但它似乎是问题的根源。

干杯,

最佳答案

线路:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

将注册任何实现 IAutofacAuthorizationFilter 的东西界面。所以严格来说,你不应该需要第二行。

第二行只是重新注册 Autofac 已经在上面的行中自动执行的操作。所以,删除第二行。

关于c# - Autofac 注册 AuthorizationFilter 调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17925477/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com