我正在使用WCF REST服务模板40(CS)。我正在抛出WebFaultExceptions:
throw new WebFaultException<string>("Error Message", HttpStatusCode.BadRequest);
但是,当我使用我的客户端测试时,所有内容都以Http状态代码500返回,响应为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")]
有没有一种简单的方法可以实现这一目标?
答案 0 :(得分:4)
在web.config中,将AutomaticFormatSelectionEnabled的值设置为false
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" />
将响应格式设置为json(您已经完成)
[WebGet(UriTemplate = "", ResponseFormat = WebMessageFormat.Json)]
答案 1 :(得分:4)
当WebHttpBehavior.FaultExceptionEnabled
设置为true
时,WebFaultException
将导致200响应,并将错误呈现为XML而不是JSON,尽管automaticFormatSelectionEnabled
配置设置或响应格式属性设置。 MSDN文档没有提到这一点,并且具有误导性,因为它声明此属性仅与500响应代码相关。
答案 2 :(得分:0)
对于仍有这个问题的人。这对我有用
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json";
throw new System.ServiceModel.Web.WebFaultException<Response>(
new Response(false,"was not found", ""),System.Net.HttpStatusCode.BadRequest);