我有一個相對較大的asp.net應用程序(大約1600個Web表單,其中10%是大型和/或複雜的),使用.NET 2.0和I需要將其升級到.NET 4.0(和4.5,一旦我們放棄對WinXP的支持)。如何在.NET中禁用JSON響應中的「d」包裝4
我添加了一些我需要的新.NET 4.0庫,並且像魅力一樣工作;然後在測試另一種形式我注意到,那些使用網絡服務,其中失敗,因爲現在所有的AJAX(JSON)要求現在就來纏「d」參數內:
{ d: {
myStatus:'',
myData: [1, 2, 3],
myInfo:{a:1, b:false}
}
}
閱讀有關過了一會兒,我明白這是.NET 3.5中的一個安全補充,但它打破了我們許多使用Web服務的應用程序形式。這些Web服務(Web頁面方式)是在形式後面的代碼,並期待這樣的:
<Services.WebMethod(enableSession:=True)> _
Public Shared Function getSomeData() As Generic.Dictionary(Of String, Object)
Dim myResponse As New Generic.Dictionary(Of String, Object)
myResponse.Add("isOK", true)
myResponse.Add("howMuch", 37.5)
myResponse.Add("someList", new String(){"a", "b"})
Return myResponse
End Function
在我的應用程序,我們使用簡單的調用與HttpRequest的形式瀏覽器調用Web服務的‘老’的代碼基礎,後者我們開始使用jQuery來讓這些調用拋出jquery.ajax函數,所以我們無法找到每個Ajax調用(「裸」並使用jquery),以便「修復」.NET 4中生成的響應更改應用程序中的每個Web服務。直到我可以解決這個問題,我堅持.NET 2.
所以,我的問題是如何配置我的ASP.NET/.NET 4 Web應用程序(在web.config中?),使Web的JSON響應服務(這是自動序列化)不會生成「d」包裝,但「舊式」數據結構?
不錯的問題,我搜索了一下找到一個解決方案,但是......不,似乎沒有一個配置來覆蓋這個重大變化。顯然現在你遇到了麻煩,因爲你將重構每一次.ajax的重現(在你的.aspx,.ascx,.js等等,正如本文中的推薦http://encosia.com/never-worry-about- asp-net-ajaxs-d-again/ – InferOn 2014-08-30 22:43:08
是的,我遇到了麻煩,部分原因是因爲我在.Net的時候沒有升級我的項目......部分原因是因爲M $認爲每個開發人員都使用ASP.Net ajax序列化/反序列化:'( – Roimer 2014-08-31 23:42:04