我的问题类似于JsonConvert.DeserializeObject and "d" wrapper in WCF,但我不确定如何根据我的情况实施此问题。这是我完整的web.config WCF数据服务:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<location path="MyWcfDataService.svc">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="MyWcfDataServiceBehavior">
<webHttp defaultOutgoingResponseFormat="Json"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</location>
</configuration>
我的数据服务很简单:
// specifying WebMessageBodyStyle.Bare doesn't seem to have any effect
[WebGet(ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle=WebMessageBodyStyle.Bare)]
public string GetJsonTest(string x)
{
var json = new
{
hello = "world"
};
return new JavaScriptSerializer().Serialize(json);
}
答案 0 :(得分:3)
为了扩展Darcy的答案,d对象是防止跨站点脚本攻击的必要条件。 http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx
答案 1 :(得分:0)
问题是你在返回值中自己生成json,然后要求WCF将生成的json字符串作为json返回。
您至少有两种可能的选择:
1)不要指定WCF将其响应值格式化为JSON并保持代码不变(您承担在每个方法中生成json的责任)。
2)修改你的方法以返回你想在json中生成的类的实例(wcf承担生成json的责任)。要实现这一点,您需要将类声明移出方法。
答案 2 :(得分:0)
据我所知,删除'd'是不可能的。出于安全原因,它内置于数据服务中。