我有一个包含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 时,这都是一团糟。
是否有删除此重复代码的建议?
(很抱歉没有为问题找到合适的标题)
答案 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)
}
}