gpt4 book ai didi

c# - 具有复杂类型参数的 WebInvoke 不适用于 Json 端点

转载 作者:太空宇宙 更新时间:2023-11-03 20:05:47 25 4
gpt4 key购买 nike

我想创建 WCF Restful 服务,它将复杂类型作为 Json 格式的参数并返回 Json。我阅读了很多文章并检查了网络上的许多示例。一些文章建议在端点行为中添加标签并装饰服务方法,如下所示,

[WebInvoke(UriTemplate = "/PlaceOrder", 
RequestFormat= WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, Method = "POST")]

在这种情况下,WCF 返回 “使用‘UriTemplate’的终结点不能与‘System.ServiceModel.Description.WebScriptEnablingBehavior’一起使用。” 错误消息。

另一种建议的方法(如本文 http://dotnetmentors.com/wcf/wcf-rest-service-to-get-or-post-json-data-and-retrieve-json-data-with-datacontract.aspx 中所述)是将“”标记添加到端点行为而不是 .但在这种情况下,IIS 会返回(“远程服务器返回错误:(400) 错误请求。”)错误消息。

能否请您帮助我如何创建采用 json 格式的复杂类型参数并返回 json 的 Restful 服务。

最佳答案

这个有效:

[ServiceContract]
public interface IService
{
[WebInvoke(Method = "POST", UriTemplate = "/ModifyCustomer", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
Customer ModifyCustomer(Customer customer);
}

public class Service : IService
{
public Customer ModifyCustomer(Customer customer)
{
customer.Age += 1;
return customer;
}
}

public class Customer
{
public string Name { get; set; }
public int Age { get; set; }
}

自托管如:

var webServiceHost = new WebServiceHost(typeof(Service), 
new Uri("http://localhost:12345"));
webServiceHost.AddServiceEndpoint(typeof(IService), new WebHttpBinding(),"");
webServiceHost.Open();

在 postman 中:

enter image description here

在 IIS Express 中使用以下配置:

<system.serviceModel>
<services>
<service name="RestServiceTest.Service" behaviorConfiguration="myServiceBehavior">
<endpoint address="" binding="webHttpBinding" contract="RestServiceTest.IService" behaviorConfiguration="myEndpointBehavior">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="myServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="myEndpointBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>

postman 的结果:

enter image description here

关于c# - 具有复杂类型参数的 WebInvoke 不适用于 Json 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23561091/

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