2012-04-21 61 views
5

我發現我的webmethod作爲爲什麼Web服務返回的數據作爲msg.d

{ "d": 
[ 
    {"id":"1","itemtxt":"Masters"}, 
    {"id":"2","itemtxt":"Transactions"}, 
    {"id":"3","itemtxt":"Misch. Reports"} 
] 
} 

返回數據如果您發現,該數組被命名爲「d」。這是爲什麼 ?有什麼規定嗎?

爲了您的信息,我返回對象(List<webitem>

public class webitem 
{ 
    public webitem(string kid, string kval) 
    { 
     this.id = kid; 
     this.itemtxt = kval; 
    } 

    public string id { get; set; } 
    public string itemtxt { get; set; } 
} 

的名單是什麼 「d」 是什麼意思?無論我從webmethod發送的任何數據是否都一樣?或者它將根據我的數據類型/類類型而改變?

編輯

這裏是將WebMethod

[WebMethod] 
public List<webitem> GetSubModules(string key) 
{ 
    string s = " order by smid"; 
    if (key != null) 
     s = " where moduleid=" + key + s; 
    return Utility.GetDDLVal("Select smid id,smname itemtxt from m_submodules "+s, null, null); 
} 
+1

我看不到任何'return ...'代碼 – gdoron 2012-04-21 23:30:17

+0

更新了webmethod返回碼 – Deb 2012-04-21 23:36:03

回答

5

這是一個有點安全功能作爲ASP.NET的一部分。只要你不改變序列化器,它將一直存在。 David Ward的博客(現已停用)表示它是什麼:

所有ASMX服務JSON都是通過ASP.NET 3.5中的ASP.NET AJAX Extensions序列化的。即使你只返回一個標量返回的值,如字符串,整數或布爾,結果總會被「d」內封閉。

而且爲什麼:

{ 「d」:1}

是不是一個有效的JavaScript語句,其中因爲這樣:

[1]

是。

因此,「d」參數的包裝可以防止字符串作爲腳本的直接執行。沒有對象或數組構造函數的擔心。

+0

感謝您的答案和偉大的鏈接! – Deb 2012-04-21 23:53:04

+1

'{「d」:1}'是JS完全有效的 - 因此,例如'{「d」:的console.log(「作惡」)}'在其中的NodeJS是安全問題完全執行您參考博客正在解釋它正試圖阻止。因此,包裝不會提供任何安全性。在鏈接的博客文章 – Soren 2012-04-22 03:12:27

+0

[戴夫裏德的評論](http://encosia.com/a-breaking-change-between-versions-of-aspnet-ajax/#comment-34045)的更多詳細信息。 – M4N 2015-06-06 09:32:28

相關問題