C# 在身份验证服务中实现自定义返回值

C# 在身份验证服务中实现自定义返回值,c#,silverlight-5.0,wcf-ria-services,C#,Silverlight 5.0,Wcf Ria Services,有一个身份验证服务必须通知客户端用户名和密码无效的原因。例如,其密码可能已过期。但是身份验证服务中的登录方法应该为匿名用户返回有效的IPrinciple或null。这意味着以下代码将不起作用: public UserAuthBase登录(字符串用户名、字符串密码、bool ispersist、字符串customData) { var result=repository.Login(用户名、密码); if(result!=null&!result.PasswordExpired) { FormsA

有一个身份验证服务必须通知客户端用户名和密码无效的原因。例如,其密码可能已过期。但是身份验证服务中的登录方法应该为匿名用户返回有效的IPrinciple或null。这意味着以下代码将不起作用:

public UserAuthBase登录(字符串用户名、字符串密码、bool ispersist、字符串customData)
{
var result=repository.Login(用户名、密码);
if(result!=null&!result.PasswordExpired)
{
FormsAuthentication.SetAuthCookie(result.Name,true);
//一些代码
}
else if(结果!=null)
{
返回新的UserAuthBase{Name=string.Empty,PasswordExpired=true};
}
返回结果;
}
此代码将抛出InvalidOperationException,并显示以下消息:

登录成功完成后,必须对用户进行身份验证


如何更改此方法以支持客户端的任何消息

如果我正确理解了您的问题,您可以在登录方法周围放置try/catch来捕获InvalidOperationException。然后,您可以选择向用户显示任何消息。

谢谢。抛出DomainException是第一选择。但我毫无例外地支持它。我被迫使用异常。。。