我正在迁移到Azure,它使用安全令牌来验证用户身份。所以现在我在邮件的标题中传递安全令牌,并使用服务器端的 IDispatchMessageInspector 行为来读取它。基础知识工作非常好,但是当令牌无法通过身份验证时,我需要拒绝它,就像它已经 UserNamePasswordValidator 一样失败。如何完成此代码的任何想法:
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
if (!this.IsAuthenticated(securityToken))
{
<Return Error Message Structure>
}
}
答案 0 :(得分:2)
简单的选择是抛出FaultException。
object IDispatchMessageInspector.AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
try
{
if (!this.IsAuthenticated(securityToken))
{
throw new FaultException<string>("some message");
}
}
catch (FaultException e)
{
throw new FaultException<string>(e.Message);
}
return null;
}
如果你想要更优雅的东西并控制返回的HttpStatus代码(默认为500),那么你可以实现一个端点行为扩展,它注册一个监视故障的Dispatch Message Inspector。见以下帖子:
http://www.shulerent.com/2016/05/31/returning-custom-http-status-codes-for-wcf-soap-exceptions/