WCF Rest序列化失败的自定义WebFaultException?

时间:2010-08-24 17:57:49

标签: c# wcf rest serialization

使用这样的对象:

[DataContract]
public class SampleItem
{              
    private int _id;

    [DataMember(IsRequired = true)]
    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }

    private string _stringValue;

    [DataMember()]
    public string StringValue
    {
        get { return _stringValue; }
        set { _stringValue = value; }
    }

这样的REST调用:

[WebInvoke(UriTemplate = "", Method = "POST")]        
public SampleItem Create(SampleItem instance)
{
    if (instance == null)
        throw new WebFaultException<string>("The SampleItem returned wasn't correctly formatted.",
                                            HttpStatusCode.BadRequest);               

    return instance;
}        

如果我使用无效的SampleItem调用它,请说出没有这样的ID的内容:

<SampleItem xmlns="http://schemas.datacontract.org/2004/07/UserWebServices" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><StringValue>SingleItem</StringValue></SampleItem>

然后服务器给我一个400(正确)的背面没有有用的错误信息(我得到的是:服务器遇到处理请求的错误。有关详细信息,请参阅服务器日志)。理想情况下,我希望它能说像ID这样的东西。

如何拦截生成此错误的位置并抛出自己的WebFaultException?

1 个答案:

答案 0 :(得分:0)

REST Start Kit查看WebProtocolException。然后,您可以在异常中发回自定义错误消息,如下所示:

catch (Exception ex)
        {
            throw new WebProtocolException(HttpStatusCode.InternalServerError, "Unexpected Error.", new ServiceFault { ExceptionDetail = "Your custom error message here" }, null);
        }