Как удалить оболочку "d" из службы данных WCF с помощью EF4 - PullRequest
1 голос
/ 28 октября 2011

Мой вопрос похож на этот JsonConvert.DeserializeObject и оболочка "d" в 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);
}

Ответы [ 3 ]

3 голосов
/ 26 октября 2012

Чтобы расширить ответ Дарси, объект d необходим для защиты от межсайтовых скриптовых атак. http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx

0 голосов
/ 16 ноября 2011

Насколько я могу судить, невозможно удалить 'd'.Из соображений безопасности он встроен в службы данных.

0 голосов
/ 28 октября 2011

Проблема в том, что вы сами генерируете json в возвращаемом значении, а затем просите WCF вернуть сгенерированную строку json как json.

У вас есть как минимум два возможных варианта:

1) Не указывайте, что WCF форматирует свои значения ответа как JSON, и оставляйте свой код как есть (вы берете на себя ответственность за создание json в каждом методе).

2) Измените ваш метод, чтобы он возвращал экземпляр класса, который вы хотите сгенерировать в json (wcf берет на себя ответственность за генерацию json). Для этого вам нужно убрать объявление класса из метода.

...