[注:我真的在這裏尋找一些好的調試技術。也許一些技巧或方法來簡化事情的,我不知道。]從ASP.Net獲取更好的錯誤信息[WebMethod]從JQuery調用
我使用調用[的WebMethod]的技術提到here和here在ASPX頁面定義從JQuery的。這似乎是一種越來越普遍的方法。
我已經使用了一段時間,在一般情況下,它的偉大工程。但是,開發它很脆弱。任何不正確的參數都會導致一個非常模糊的,非特定的錯誤消息。舉例來說,如果我有一個相當複雜的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。這只是一個例子,可能有其他100種微妙的錯字式錯誤。
如果我打電話從C#這種方法,編譯器會給我一個錯誤消息類似「SaveComplexRecord沒有重載的方法有三個參數。」或一些其他有用的信息,指出你在正確的方向。
所以...有沒有讓ASP.Net在這裏產生更好的錯誤信息的一種方式?
或者是否有一些實用程序會自動構建[WebMethod]調用的JSON參數結構? (就像你可以自動獲得一個Web服務的WSDL)
......或者說,我可能會丟失任何其他技術?
而對於完整性這裏是我如何把這些從的WebMethods JQuery的:
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引擎對其進行序列化。 – 2009-10-26 15:21:03
很酷。沒有意識到這一點。 – 2009-10-27 16:58:14