gpt4 book ai didi

c# - 如何将参数传递给 WCF post 方法(restful 服务)

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

我正在开发基于 WCF 休息的服务。我在我的服务中编写了 Get 和 Post 方法,当我输入 URL(JSON 格式)时,Get 方法能够工作(获取数据)。

问题是当我尝试对 POST 方法执行相同操作时,url 导航到其他页面“找不到页面...”。

我知道 POST 方法需要提交表单来处理请求。

出于这个原因,我还尝试了 chrome 扩展(Simple Rest 客户端、Advanced Rest 客户端、Post man rest 客户端)和 Fiddler。

这里贴出我的服务方法——Get方法(接口(interface)方法声明)。

[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "GetCategoryTypes/")]
List<CategoryType> GetCategoryTypes();

这是我的 POST 方法

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "AddOrders/",
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
int AddOrders(decimal amount, int tableID, DateTime orderDate, int isActive);

这是我的服务的 web.config 文件。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="ServiceBehaviour" allowCookies="true" messageEncoding="Mtom" />
</basicHttpBinding>
<webHttpBinding>
<binding name="ServiceBehaviour1" allowCookies="true"/>
</webHttpBinding>
</bindings>
<services>
<service name="EMC.DD.ServiceLayer.Service1" ehaviorConfiguration="ServiceBehaviour">
<endpoint address="http://localhost/EMCService/Service1.svc"
binding="basicHttpBinding" contract="EMC.DD.ServiceLayer.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</service>
<service name="EMC.DD.ServiceLayer.Service2"
behaviorConfiguration="ServiceBehaviour1">
<endpoint address="http://localhost/EMCService/Service2.svc"
binding="webHttpBinding" behaviorConfiguration ="web"
contract="EMC.DD.ServiceLayer.IService2">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name ="ServiceBehaviour">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name ="ServiceBehaviour1">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name ="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
<system.webServer>
<directoryBrowse enabled="true" />
</system.webServer>
</configuration>

我不太确定我的方法构造(POST 方法)是否有任何错误,或者我需要测试它的方式。

我需要你们所有专家的帮助,在过去的两天里我一直在与这个问题作斗争,最后我来到这里发布它。

非常感谢任何帮助。

最佳答案

经过多次试验和许多事情,我终于得到了可行的解决方案。我在这里发布了我为使 POST 方法起作用所做的工作。

  [OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "AddOrders", RequestFormat =
WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,BodyStyle =
MessageBodyStyle.Bare)]
int AddOrders(RequestData orderRequestData);

这是为了在操作合约中实现。

客户端应用程序:-

        WebClient WC = new WebClient();
WC.Headers.Add("Content-Type", "application/json");
WC.Encoding = Encoding.UTF8;

MemoryStream MS = new MemoryStream();
DataContractJsonSerializer JSrz = new
DataContractJsonSerializer(typeof(RequestData));
JSrz.WriteObject(MS, order);
string data = Encoding.UTF8.GetString(MS.ToArray(), 0, (int)MS.Length);

byte[] res1 =
WC.UploadData("http://localhost/EMCService/Service2.svc/AddOrders", "POST",MS.ToArray());

MS = new MemoryStream(res1);
JSrz = new DataContractJsonSerializer(typeof(int));
int result = (int)JSrz.ReadObject(MS);

我没有进行任何配置设置,并且仍然使用我在上述问题中发布的 web.config 的旧设置,并且它正在运行。

关于c# - 如何将参数传递给 WCF post 方法(restful 服务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25830289/

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