我有一个使用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);
});
答案 0 :(得分:1)
即使输入的JSON无效,您也希望在评论中返回200
。
通过让WCF方法接受any arbitrary data,您可能会更好地处理此问题。进入方法后,通过序列化/反序列化然后继续执行常规逻辑来自行验证。
但是,要添加:通过指定XML或JSON的请求格式,客户端必须正确 - 这是最佳实践,并且最好将验证留给框架本身。通过适应任意字符串,您创建了一个“模糊”端点,根据您更改的验证逻辑,该端点可能有效,也可能无效。