WCF服务返回JSON格式的错误

Joe*_*man 5 c# wcf json

是否有可能获得WCF服务以向客户端返回"错误"?在使用SOAP时我会相信这是可能的,但我想返回JSON.

理想情况下,HTTP响应代码将被设置为表示发生错误的内容,然后在JSON响应中可以获得问题的详细信息.

目前,我正在做这样的事情:

[ServiceContract]
public class MyService
{
    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    [FaultContract(typeof(TestFault))]
    public MyResult MyMethod()
    {
        throw new FaultException<TestFault>(new TestFault("Message..."), "Reason...");
    }
}
Run Code Online (Sandbox Code Playgroud)

哪里TestFault是这样的:

[DataContract]
public class TestFault
{
    public TestFault(string message)
    {
        this.Message = message;
    }

    [DataMember]
    public string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

目前服务配置没有什么特别之处.

这会导致"400错误请求"响应,并出现HTML格式错误.(当我includeExceptionDetailInFaults,我可以看到'原因...'和详细信息FaultException,但没有详细信息TestFault.)

当没有抛出Exception(或FaultException)时,Web服务返回JSON ok .

有什么建议..?

Ole*_*leg 14

所有您需要的东西都可以从.NET 4开始.有关详细信息,请参阅此处.例如:

throw new WebFaultException<string>(
    "My error description.", HttpStatusCode.BadRequest); 
Run Code Online (Sandbox Code Playgroud)


Tim*_*res 7

编辑:固定链接+添加摘要.

您可以在此处找到解释和解决方案

要从链接中总结解决方案,请扩展WebHttpBehavior并覆盖AddServerErrorHandlers,以便添加自己的IErrorHandler实现.此实现将从服务调用中提取错误并生成故障信息.

链接的文章还说明了如何编写自己的服务主机工厂来设置此行为.