处置授权属性使用的WCF服务

本文关键字:WCF 服务 授权 属性 | 更新日期: 2023-09-27 18:19:13

我有一个这样的自定义授权属性:

public class AuthorizeApplicationAttribute : AuthorizeAttribute {
    private MainServiceSoapClient client;
    public AuthorizeApplicationAttribute() {
        this.client = new MainServiceSoapClient();
    }
    public AuthorizeApplicationAttribute(MainServiceSoapClient client) {
        this.client = client;
    }
    protected override bool IsAuthorized(HttpActionContext actionContext) {
        if (!base.IsAuthorized(actionContext)) return false;
        var currentUser = System.Web.Security.Membership.GetUser();
        if (currentUser == null) return false;
        var userId = (int)currentUser.ProviderUserKey;
        return client.HasPermission(userId);
    }
}

我在WebApiConfig中注册为:

public class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Web API configuration and services
        config.Filters.Add(new AuthorizeApplicationAttribute());
        // more configuration ...
    }
}

AuthorizeAttribute没有处置,我可以调用构造函数与soap客户端实例,但然后我不确定在哪里处置它。

仅供参考:我没有使用IoC容器。试着学习如何手工制作

这个例子使用了SoapClient,但我对DbContext有同样的问题,而我可以不处理DbContext而生活,不认为不处理WCF客户端会那么好。

处置授权属性使用的WCF服务

在IsAuthorized方法中使用using语句来初始化和Dispose,而不是在构造函数中初始化。

如果你需要依赖注入,你可以使用属性注入。

这个问题有两个答案与Ninject和StructureMap如何使用依赖注入与属性?

这个问题的解决方案可能会给你想要的东西:

WCF客户端"使用"块问题的最佳解决方案是什么?