【问题标题】:<WebMethod()> attribute changes from 2.0 to 3.5<WebMethod()> 属性从 2.0 更改为 3.5
【发布时间】:2010-12-08 17:45:09
【问题描述】:

我有一个看起来像这样的方法:

<WebMethod()> _
Public Function Search(ByVal q As String) As String

从 .net 2.0 更新到 3.5 似乎打破了这一点。

我们正在对返回的值执行 data.split(),这会产生错误 - 返回的值现在看起来是一个 json 结构,而不是一个简单的字符串。

有没有办法恢复以前的行为?

【问题讨论】:

  • 你是什么意思“破碎”?请明确点。 .NET 3.5 仍在使用 CLR 2.0,对 ASMX Web 服务的重大更改很少。
  • 在更新之前,我们正在使用返回值执行 data.split(),现在它失败并出现“未实现”错误。

标签: json asmx webmethod


【解决方案1】:

您必须导入 System.Web.Script.Services

然后,尝试添加这个属性:

<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Xml)> _

你如何调用 web 方法?通过javascript?

【讨论】:

  • 一定要在你的 ajax 方法中指定一个 dataType 参数。如果你不指定 jquery 会猜。 api.jquery.com/jQuery.ajax
  • dataType is "json" - 我们得到了一个 json 结构,但显然在更新到 3.5 之前,它是一个简单的字符串。尝试验证这是 2.0 和 3.5 之间的更改,看看是否有办法恢复到以前的行为,或者提供证据表明我们需要更新我们的 js 调用。
  • 2.0 不知道如何返回 json(除非您通过 ajaxtoolkit 进行了扩展),因此您没有得到 json。只需使用 success: function(data) 和 data.d 来获取您的字符串。
  • 我刚刚尝试将我的站点目标更改为 2.0,默认情况下我得到了 xml。不知道你之前是如何得到一个字符串的。也许发布你的 jquery 代码
【解决方案2】:

我们遇到了类似的问题。使用 2.0 的 Webmethod 和 jquery ajax 调用的基本设置,它返回一个字符串(js 中的类型字符串)或字符串数​​组(js 中的类型对象),在 3.5 中它总是返回一个对象,返回时返回的实际数据在 .d 下像字符串或字符串数​​组这样的原语。

到目前为止,我最好的解决方案是使用 javascript 方法来检查 .d。

    function getResponse(r){
        if(r.d!=null){
            return r.d;
        }else{
            return r;
        }
    }

我必须同时支持 2.0 和 3.5 过渡的呼吁,并且宁愿不必花费太多精力,因为 2.0 很快就会消失。

但我宁愿有更好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多