我有以下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);
}
});
});
但奇怪的是(对我来说)是,我无法在data.Name
内访问success()
。
不知何故,它向d
添加了一个对象data
。
因此,如果我想访问该名称,我需要使用:data.d.Name
。
d
来自哪里?
答案 0 :(得分:2)
没什么好担心的。它来自在服务器上使用OData协议:
此模式确保从OData服务返回的JSON有效负载 有效的JSON语句,但不是有效的JavaScript语句。这个 防止OData JSON响应作为a的结果执行 跨站点脚本(XSS)攻击。
要了解细节,请参阅http://www.odata.org/documentation/odata-version-2-0/json-format。
答案 1 :(得分:1)
默认情况下,这既可以用于OData格式,也可以用作安全措施。您可以通过将以下内容添加到ScriptMethod来轻松删除它:
BodyStyle = WebMessageBodyStyle.Bare