通过WCF REST传递验证异常

时间:2010-03-23 16:52:38

标签: wcf validation rest exception

我正在使用WCF和REST,我有复杂的类型,它们工作正常。现在我需要检查验证,我正在考虑使用DataAnnotations,例如。

public class Customer
{
   [Required]
   public string FirstName {get;set;}
}

现在问题是如何将此验证传递给REST服务?

另外我需要在它返回时验证对象,并抛出异常,如果我要抛出异常,那么使用REST执行此操作的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

我会使用Validation Application Block中包含的Microsoft Enterprise Library来验证服务界面中使用的数据传输对象。您可以use attributes to decorate the objects' properties with validation rules使用与ASP.NET Data Annotations相同的方式。

如果验证失败,您应该返回适​​当的HTTP错误代码,并包含HTTP响应中出错的详细信息。

以下是一个例子:

public void PostCustomer(Customer instance)
{
    ValidationResults results = Validation.Validate(instance);

    if (!results.IsValid)
    {
        string[] errors = results
            .Select(r => r.Message)
            .ToArray();

        WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.BadRequest;
        WebOperationContext.Current.OutgoingResponse.StatusDescription = String.Concat(errors);
    }

    // Proceed with custom logic
}

如果您使用的是WCF REST Starter Kit,则应该按照WebProtocolException中的说明抛出 this article

答案 1 :(得分:1)

我会考虑编写一个自定义IDispatchMessageInspector实现,其中在AfterReceiveRequest方法中,您手动调用验证体系结构。

我不会详细介绍如何调用数据注释验证体系结构,因为我确信如果您还不知道如何操作,可以在网上找到它。也就是说,一旦获得验证结果,就可以枚举它们,然后,如果有任何失败的验证,您可以抛出一个填充了AfterReceiveRequest实现细节的通用验证错误。