【发布时间】:2010-12-01 16:17:01
【问题描述】:
[注意:我真的在这里寻找一些好的调试技术。也许有一些技巧或方法可以简化我不知道的事情。]
如here 和here 所述,我正在使用从JQuery 调用在ASPX 页面中定义的[WebMethods] 的技术。这似乎是一种越来越普遍的方法。
我已经使用了一段时间了,总的来说,它工作得很好。但是在开发时它非常脆弱。任何不正确的参数都会导致非常模糊、不具体的错误消息。例如,如果我有一个相当复杂的 web 方法定义为:
[WebMethod]
public static string SaveComplexRecord(int recID, GeneralData general, SomeObject data, SomeOtherObject moreData)
{
//do a bunch of stuff with that data
}
而且 GeneralData、SomeObject 和 SomeOtherObject 都混合了各种类型的参数(字符串、整数、布尔值、日期时间)。很可能,尤其是在初始开发期间,我会错误地在客户端构建 JSON .也许我会这样做:
var data = {
recID: curID,
general:
{
a: aValue,
b: bValue,
c: cValue
},
data:
{
d: dValue,
e: eValue,
f: fValue
},
moredata:
{
g: gValue,
h: hValue,
i: iValue
}
};
这会导致错误,因为第三个参数的名称是moreData,而不是moredata。这只是一个例子,可能还有一百个其他细微的错字式错误中的任何一个。
如果我从 C# 调用此方法,编译器会给我一条错误消息,例如“SaveComplexRecord 的重载方法不接受三个参数”。或其他一些有用的信息,为您指明正确的方向。
那么...有没有办法让 ASP.Net 在这里产生更好的错误消息?
或者是否有一些实用程序可以自动构建 [WebMethod] 调用的 JSON 参数结构? (就像您可以自动获取 Web 服务的 WSDL)
...或我可能遗漏的任何其他技术?
为了完整起见,这里是我从 JQuery 中调用这些 WebMethods 的方式:
var jsondata = $.toJSON(data);
$.ajax({
type: "POST",
url: "MyWebPage.aspx/SaveComplexRecord",
data: jsondata,
contentType: "application/json; charset=utf-8",
dataType: "json",
beforeSend: function(xhr)
{
xhr.setRequestHeader("Content-type",
"application/json; charset=utf-8");
},
success: function(msg)
{
//do something on success
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert("ERROR status:" + textStatus + " error:" + errorThrown);
}
});
【问题讨论】:
-
有点不相关,但我建议使用 JSON.stringify 而不是 $.toJSON。在现代浏览器中,JSON.stringify 将自动利用更快的浏览器原生功能,而不是通过 JavaScript 引擎对其进行序列化。
标签: c# asp.net jquery web-services