处理发送到WCF服务的无效JSON字符串

时间:2014-07-08 20:18:12

标签: asp.net json wcf

我有一个使用jQuery调用的ASP.NET 4.0 WCF服务。我将服务配置为接受JSON对象作为字符串。例如:

{"name": Joe, "age": 32 }

如果JSON字符串有效,一切正常。如果JSON字符串无效,我会收到500内部服务器错误响应。我想知道的是如何在服务器端捕获错误,以便我自己处理它?我在我调用的方法上设置了一个断点,它永远不会被击中。我假设当服务反序列化字符串时发生错误,因此对象永远不会作为参数传递给我的方法。

我查看了FaultContract属性,看来我可以返回一些关于异常的自定义详细信息,但它仍然不允许我在反序列化JSON字符串时捕获错误。< / p>

接口

<ServiceContract()>
Public Interface IApplicationService

    <OperationContract()>
    <WebInvoke(method:="POST", _
    BodyStyle:=WebMessageBodyStyle.WrappedRequest, _
    ResponseFormat:=WebMessageFormat.Json,
    RequestFormat:=WebMessageFormat.Json)> _
    Function DeleteAlbum(albumId As Long) As DeleteAlbumResponse

End Interface

的Javascript

var data = JSON.stringify({"albumId" : 53});    

$.ajax({
    url: '/api/application.svc/Web/DeleteAlbum',
    data: data,
    type: "POST",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    processData: true
})
.done(function (data) {

    console.log(data);

})
.fail(function (jqxhr, textStatus, error) {

    console.log(error);

}); 

1 个答案:

答案 0 :(得分:1)

即使输入的JSON无效,您也希望在评论中返回200

通过让WCF方法接受any arbitrary data,您可能会更好地处理此问题。进入方法后,通过序列化/反序列化然后继续执行常规逻辑来自行验证。

但是,要添加:通过指定XML或JSON的请求格式,客户端必须正确 - 这是最佳实践,并且最好将验证留给框架本身。通过适应任意字符串,您创建了一个“模糊”端点,根据您更改的验证逻辑,该端点可能有效,也可能无效。