【发布时间】:2011-09-09 15:43:07
【问题描述】:
我正在使用 WCF REST 服务模板 40(CS)。我这样抛出 WebFaultExceptions:
throw new WebFaultException<string>("Error Message", HttpStatusCode.BadRequest);
但是,当我用我的客户端对此进行测试时,所有内容都作为 500 的 Http 状态代码返回,并且响应是 XML。我可以在 XML 响应中看到错误消息。当我正确拨打电话时,我会收到 200 响应,并且响应采用 JSON 格式,考虑到我的配置和 ServiceContract 的设置方式,这是正确的。
我可以让错误请求的 HTTP 状态代码为 400 的唯一方法是这样做:
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.BadRequest;
我仍然无法让异常返回为 JSON。
编辑添加签名以获取更多信息:
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, UriTemplate = "myendpoint")]
有没有简单的方法可以做到这一点?
【问题讨论】:
-
如果这工作正常,状态码应该是 400(错误请求)。您能否启用跟踪以查看是否有其他原因阻止 WebFaultException
被处理?我刚刚使用 REST 服务模板创建了一个新项目,将 (ResponseFormat = WebMessageFormat.Json) 添加到其中一个操作中,并添加了您所拥有的同一行 - 响应返回编码为 JSON,而不是 XML。 -
可能是我在我的代码中这样做:
catch(WebFaultException<string> ex) { throw; }吗?如果需要,我还可以添加其他配置信息。 -
这应该不是问题;能否贴出操作合约的签名(带有[WebGet/WebInvoke]属性)?
-
我添加了我的方法签名。它们都是 POST 并且具有类似的设置。
标签: c# .net wcf exception rest