根据http://msdn.microsoft.com/en-us/library/system.identitymodel.selectors.usernamepasswordvalidator.aspx上的UserNamePasswordValidator示例,如果用户名或密码错误,应该抛出 SecurityTokenException 。这工作正常,但不是得到 SecurityTokenException 我得到 MessageSecurityException ,我传递的文本消息在某处丢失。我不是在发送“故障细节”。
如何正确捕捉这些错误的任何想法?我自己会尝试一些事情,看看能否做到。
答案 0 :(得分:8)
快速查找(为什么我之前没有看到...),我在问题中提供的链接指向http://msdn.microsoft.com/en-us/library/aa702565.aspx处的另一个样本
它与第一个示例有些不同,并且如果您想提供消息详细信息,则有关于使用FaultException而不是SecurityTokenException的注释。
public override void Validate(string userName, string password)
{
if (null == userName || null == password)
{
throw new ArgumentNullException();
}
if (!(userName == "test1" && password == "1tset") && !(userName == "test2" && password == "2tset"))
{
// This throws an informative fault to the client.
throw new FaultException("Unknown Username or Incorrect Password");
// When you do not want to throw an infomative fault to the client,
// throw the following exception.
// throw new SecurityTokenException("Unknown Username or Incorrect Password");
}
}
客户端上捕获的异常现在包含一个FaultException类型的内部异常,其中包含我要公开的文本消息。