【发布时间】:2014-08-30 21:56:15
【问题描述】:
我有一个使用 .NET 2.0 的相对较大的 asp.net 应用程序(大约 1600 个 Web 表单,其中 10% 很大和/或复杂),我需要将其升级到 .NET 4.0(然后是 4.5,一旦我们放弃对 WinXP 的支持)。
我添加了几个我需要的新的 .NET 4.0 库,并且工作起来非常棒;然后在测试另一种表单时,我注意到那些使用 Web 服务的表单失败了,因为现在所有 AJAX (JSON) 请求都包含在“d”参数中:
{ d: {
myStatus:'',
myData: [1, 2, 3],
myInfo:{a:1, b:false}
}
}
在阅读了一些内容之后,我了解到这是 .NET 3.5 中的一项安全附加功能,但它破坏了我们许多使用 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”包装器,但“旧式”数据结构?
【问题讨论】:
-
很好的问题,我搜索了一下以找到解决方案,但是......不,似乎没有覆盖这个重大更改的配置。显然现在你遇到了麻烦,因为你会重构你的 .aspx、.ascx、.js 等中的 .ajax(
-
是的,我遇到了麻烦,部分原因是我没有在 .Net 升级项目时升级我的项目……部分原因是 M$ 假设每个开发人员都使用 ASP.Net ajax 序列化/反序列化:'(
标签: asp.net .net ajax json vb.net