当前位置:  开发笔记 > 编程语言 > 正文

如何让ASMX文件输出JSON

如何解决《如何让ASMX文件输出JSON》经验,为你挑选了4个好方法。

我创建了一个带有代码隐藏文件的ASMX文件.它工作正常,但它输出XML.

但是,我需要输出JSON.ResponseFormat配置似乎不起作用.我的代码隐藏是:

[System.Web.Script.Services.ScriptService]
public class _default : System.Web.Services.WebService {
    [WebMethod]
    [ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)]
    public string[] UserDetails()
    {
        return new string[] { "abc", "def" };
    }
}

小智.. 53

要接收纯JSON字符串,而不将其包装到XML中,您必须直接将JSON字符串写入HttpResponse并将WebMethod返回类型更改为void.

    [System.Web.Script.Services.ScriptService]
    public class WebServiceClass : System.Web.Services.WebService {
        [WebMethod]
        public void WebMethodName()
        {
            HttpContext.Current.Response.Write("{property: value}");
        }
    }


Pavel Chuchu.. 39

从 WebService的返回XML即使ResponseFormat设置为JSON:

确保请求是POST请求,而不是GET.Scott Guthrie有一篇文章解释了原因.

虽然它是专门为jQuery编写的,但这对您也很有用:
使用jQuery来使用ASP.NET JSON Web服务

您也可以添加以下注释[ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)]公共字符串TestData()以在您的Web服务中启用GET (7认同)

我不同意POST请求在这里是合适的.端点不期望数据,OP不向服务器发送任何数据(与Scott G的帖子不同),当然也不打算更改服务器上的数据.事实上,OP具有正确的ScriptMethod属性以允许GET请求 - UseHttpGet = true.他们只是调用一个端点来"获取"一些数据.GET请求很好 - 所有缺少的是在请求中设置Content-Type,请参阅下面的答案. (3认同)


marc.. 15

这可能是现在的老消息,但魔术似乎是:

Web服务类的[ScriptService]属性

[ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)] on方法

内容类型:请求中的application/json

有了这些部分,GET请求就会成功.

对于HTTP POST

[ScriptMethod(UseHttpGet = false,ResponseFormat = ResponseFormat.Json)] on方法

在客户端(假设您的webmethod被称为MethodName,它需要一个名为searchString的参数):

        $.ajax({
            url: "MyWebService.asmx/MethodName",
            type: "POST",
            contentType: "application/json",
            data: JSON.stringify({ searchString: q }),
            success: function (response) {                  
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert(textStatus + ": " + jqXHR.responseText);
            }
        });

为什么在世界上需要将`Content-type`设置为`application/json`?不应该`[ScriptMethod(ResponseFormat = ResponseFormat.Json)]`自动执行此操作?难以置信的.谢谢你的研究. (3认同)


Bryan Rehbei.. 9

我学到了很多困难的方法(基本上花了4个小时在谷歌上),你可以在你的ASPX文件中使用PageMethods来返回静态方法的JSON(带有[ScriptMethod()]标记),但是如果你决定移动你的静态方法到一个asmx文件,它不能是一个静态方法.

此外,您需要告诉Web服务Content-Type:application/json以便从调用中恢复JSON(我使用jQuery和使用jQuery时要避免的3个错误文章非常有启发性 - 它来自同一个网站在这里的另一个答案中提到).



1> 小智..:

要接收纯JSON字符串,而不将其包装到XML中,您必须直接将JSON字符串写入HttpResponse并将WebMethod返回类型更改为void.

    [System.Web.Script.Services.ScriptService]
    public class WebServiceClass : System.Web.Services.WebService {
        [WebMethod]
        public void WebMethodName()
        {
            HttpContext.Current.Response.Write("{property: value}");
        }
    }



2> Pavel Chuchu..:

从 WebService的返回XML即使ResponseFormat设置为JSON:

确保请求是POST请求,而不是GET.Scott Guthrie有一篇文章解释了原因.

虽然它是专门为jQuery编写的,但这对您也很有用:
使用jQuery来使用ASP.NET JSON Web服务


您也可以添加以下注释[ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)]公共字符串TestData()以在您的Web服务中启用GET
我不同意POST请求在这里是合适的.端点不期望数据,OP不向服务器发送任何数据(与Scott G的帖子不同),当然也不打算更改服务器上的数据.事实上,OP具有正确的ScriptMethod属性以允许GET请求 - UseHttpGet = true.他们只是调用一个端点来"获取"一些数据.GET请求很好 - 所有缺少的是在请求中设置Content-Type,请参阅下面的答案.

3> marc..:

这可能是现在的老消息,但魔术似乎是:

Web服务类的[ScriptService]属性

[ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)] on方法

内容类型:请求中的application/json

有了这些部分,GET请求就会成功.

对于HTTP POST

[ScriptMethod(UseHttpGet = false,ResponseFormat = ResponseFormat.Json)] on方法

在客户端(假设您的webmethod被称为MethodName,它需要一个名为searchString的参数):

        $.ajax({
            url: "MyWebService.asmx/MethodName",
            type: "POST",
            contentType: "application/json",
            data: JSON.stringify({ searchString: q }),
            success: function (response) {                  
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert(textStatus + ": " + jqXHR.responseText);
            }
        });


为什么在世界上需要将`Content-type`设置为`application/json`?不应该`[ScriptMethod(ResponseFormat = ResponseFormat.Json)]`自动执行此操作?难以置信的.谢谢你的研究.

4> Bryan Rehbei..:

我学到了很多困难的方法(基本上花了4个小时在谷歌上),你可以在你的ASPX文件中使用PageMethods来返回静态方法的JSON(带有[ScriptMethod()]标记),但是如果你决定移动你的静态方法到一个asmx文件,它不能是一个静态方法.

此外,您需要告诉Web服务Content-Type:application/json以便从调用中恢复JSON(我使用jQuery和使用jQuery时要避免的3个错误文章非常有启发性 - 它来自同一个网站在这里的另一个答案中提到).

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有