【发布时间】:2009-01-06 18:28:28
【问题描述】:
以 RESTful 方式使用 WCF 似乎很棒。我是大枪的忠实粉丝,比如简单性和灵活性,但我也喜欢 Urls 最终的外观。怎么说呢,我是程序员。
用于检索和编辑资源的简单 API 与一组几乎同样简单的可能错误响应相匹配,我不禁感到,要保持“纯” RESTful 方法,我可能会不屑一顾通过脸,或者更具体地说,是我的 Web 服务消费者的鼻子。我可能是错的,但我可以使用的 Http 错误代码似乎并不多,也没有办法传回自定义错误消息。
为了澄清,我说的是适当的异常错误,而不是预期的错误。我想将问题实际传达给用户,以帮助他们确定需要做些什么来纠正它。
我正在考虑的可能选项...
-
只需使用 Http 错误代码 - 这似乎对我能够表达的内容过于严格,并且不允许我提供自定义消息。如果我错了,请(!)纠正我。
-
总是返回 Http Success 但返回自定义错误对象——显然是最灵活的,但肯定不是最 RESTful 的。
如果有人能分享一些关于这个特定问题的真实经验,我将不胜感激。
更新
感谢使用OutgoingWebResponseContext 对象的StatusDescription 属性的建议。起初它似乎是我可以使用的东西。
我得出的结论是,上面的第二个选项不适合我。我想坚持 Http 能给我的东西。
但是,我在让它工作时遇到了问题。无论我为此属性提供什么值,它都不会在响应中返回。
我的服务方法是这样的
public MyType GetMyTypes(string criteria)
{
try
{
return GetMyTypes();
}
catch (Exception ex)
{
OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse;
response.StatusCode = HttpStatusCode.Forbidden;
response.StatusDescription = "A Big fat error occurred";
return null;
}
}
这是原始响应消息。没有提到自定义消息...
HTTP/1.1 403 禁止
服务器:ASP.NET 开发服务器/9.0.0.0
日期:格林威治标准时间 2009 年 1 月 7 日,星期三 14:01:20
X-AspNet-版本:2.0.50727
缓存控制:私有
内容长度:0
连接:关闭
好像我只需要访问客户端上的正确属性。信息根本没有通过链接发送。
StatusDescription 属性实际上是做什么的?
更新
我从来不知道如何设置 StatusDescription 属性。我最终根本没有包含任何错误消息,只使用了 Http 状态代码。我选择为我的服务公开 Soap 和 Restful 端点,因此客户可以选择他们喜欢使用的端点——简单的 Restful 消息或相对丰富的 Soap 消息。
【问题讨论】:
-
对不起,我没时间了,但也许这个链接robbagby.com/rest/effective-error-handling-with-wcf-rest 可能有用。
标签: wcf web-services error-handling rest