对c# webservice的Ajax调用返回对象中的对象

本文关键字:对象 返回 调用 Ajax webservice | 更新日期: 2023-09-27 17:50:58

我有以下c# webservice(用于测试目的),我最终将其转换为WCFWebservice。

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class Albums : WebService {
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public Person GetPeople() {
        return new Person("Mike", 12);
    }
}

我用下面的js调用它:

    $(document).ready(function () {
        $.ajax({
            url: '/webservice/Albums.asmx/GetPeople',
            contentType: "application/json; charset=utf-8;",
            dataType: "json",
            type: 'post',
            success: function (data) {
                console.log(data);
            }
        });
    });

但奇怪的是(对我来说),我不能在success()中访问data.Name。不知何故,它向data添加了一个对象d。因此,如果我想访问名称,我需要使用:data.d.Name .

这个d是从哪里来的?

对c# webservice的Ajax调用返回对象中的对象

没什么好担心的。它来自于在服务器上使用OData协议:

此模式确保从OData服务返回的JSON有效负载是正确的有效的JSON语句,但不是有效的JavaScript语句。这防止OData JSON响应被执行跨站脚本攻击

要了解细节,请参阅http://www.odata.org/documentation/odata-version-2-0/json-format。

对于OData格式化和作为一种安全措施,默认都是这样做的。您可以通过向ScriptMethod中添加以下内容轻松地删除它:

BodyStyle = WebMessageBodyStyle.Bare