如何在asp.net Web服务中删除重复的登录检查代码?

时间:2014-11-19 03:21:52

标签: c# asp.net web-services

我有一个包含10多种网络服务方法的asp.net网络服务页面( asmx )。这些方法都没有使用会话(将来也不会使用)。由于每个调用都需要对用户进行身份验证,因此每个方法都将 userName password 作为前两个参数。所以,所有这些方法的前几行看起来都是这样的:

public Response MyService(string userName, string password, <... other params>)
{   
    Identity userIdentity;

    using (var credentialManager = new CredentialManager())
    {
        userIdentity = credentialManager.GetLoginIdentity(userName, password);

        if (userIdentity==null)
        {
            Log.Info("Login attempt failed for: {0}", userName);
            return Response.ErrorResponse(credentialManager.ErrorMessage);
        }

        Log.Info("Logged in: {0}", userName);
    }   

    // Actual service code 
    ...
    ...

}

//These are custom: Response, Identity, CredentialManager, Log

我不喜欢为每个新方法复制这些行。此外,每当需要重新格式化或添加任何 log 时,这都是一团糟。

是否有删除此重复代码的建议?

(很抱歉没有为问题找到合适的标题)

1 个答案:

答案 0 :(得分:0)

如何使用常用方法对用户进行身份验证并从第一步传递每个web方法的用户名和密码?

public Response MyService(string userName, string password, <... other params>)
{   
    Identity userIdentity;
    string errorMessage = string.Empty;
    if(TryAuthorize(userName, password, out errorMessage))
    {
        //do stuff
    }
    else
    {
        return Response.ErrorResponse(errorMessage)
    }
}