gpt4 book ai didi

wcf - WCF 如何根据请求决定何时返回 SOAP 或 JSON?

转载 作者:可可西里 更新时间:2023-11-01 16:31:06 25 4
gpt4 key购买 nike

我刚刚创建了我的第一个 WCF REST 服务。我希望它返回 JSON,所以我指定了响应格式。起初,我很沮丧,因为它一直返回 SOAP,我不知道为什么,但我看到一位博主正在使用 Fiddler,所以我尝试了一下,然后我得到了一个 JSON 响应。

我认为原因是因为 Fiddler 没有发送这个 HTTP header :

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

但后来我尝试使用此 header 制作请求:

Accept: application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

但是没有用。 WCF 如何决定何时使用 JSON 或 SOAP?

有没有办法强制始终返回 JSON?

我想确保当我使用该服务时,它会返回 JSON 而不是 SOAP。

谢谢。

更新:示例代码:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Service1
{
[WebGet(UriTemplate = "", ResponseFormat = WebMessageFormat.Json, RequestFormat= WebMessageFormat.Json)]
public List<SampleItem> GetCollection()
{
// TODO: Replace the current implementation to return a collection of SampleItem instances
return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
}

[WebInvoke(UriTemplate = "", Method = "POST")]
public SampleItem Create(SampleItem instance)
{
// TODO: Add the new instance of SampleItem to the collection
throw new NotImplementedException();
}

[WebGet(UriTemplate = "{id}", ResponseFormat = WebMessageFormat.Json)]
public SampleItem Get(string id)
{
// TODO: Return the instance of SampleItem with the given id
return new SampleItem() { Id = Int32.Parse(id), StringValue = "Hello" };
}
}

最佳答案

我有这样的端点行为

<endpointBehaviors>
<behavior name="jsonEndpoint">
<webHttp defaultOutgoingResponseFormat="Json" />
</behavior>
</endpointBehaviors>

如果您将此配置为端点行为,则无需触及您的操作合约,如果通过不同的端点访问它们,它们可以产生不同的输出。

我还不能完全确定的一件事是关于 WCF 似乎产生的两种不同的 Json 样式。如果您使用 enableWebScript,这将生成 { "d": { ... } } Json 格式,并将 defaultOutgoingResponseFormat 选项设置为 Json,将没有 d 对象,只有 Json。

关于wcf - WCF 如何根据请求决定何时返回 SOAP 或 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7478845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com