gpt4 book ai didi

c# - WCF REST 服务 JSON 发布数据

转载 作者:可可西里 更新时间:2023-11-01 08:36:12 26 4
gpt4 key购买 nike

寻找有关基于 VS2010 中的 WCF REST 模板 40(CS) 扩展的 wcf 4 rest 服务的一些指导。在过去的几天里,我一直在努力让这个 bug 工作,审查其他帖子,虽然我已经接近了,但我似乎无法越过终点线。在经历了很多挫折之后,它终于访问了服务并发布(使用 fiddler 请求生成器),但是方法参数显示为 null,但是它在请求生成器中被正确设置了。我猜这可能是配置问题,但随着截止日期的临近,我没有时间进行更多研究了。 FWIW,在调试中,jsonstring 变量为空。我承认这是一个菜鸟问题,因为这是我第一次通过 REST,任何帮助将不胜感激!

提前致谢。

网络配置

<system.web>
'<compilation debug="true" targetFramework="4.0" />
</system.web>

<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
</system.webServer>

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>

全局.asax.cs

   public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes();
}

private void RegisterRoutes()
{
RouteTable.Routes.Add(new ServiceRoute("Scoring", new WebServiceHostFactory(), typeof(ScoringSvc)));
}
}

服务代码

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class ScoringSvc
{
[OperationContract]
[WebInvoke
(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json)]
public string BOB(string jsonstring)
{
return "Received: " + jsonstring;
}
}

Fiddler 请求头

Host: localhost
Content-Length: 20
Content-Type: application/json; charset=UTF-8

请求正文

{"Name":"Frank"}

fiddler 的原始响应

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 12
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 21 Mar 2011 21:31:14 GMT

"Received: "

最佳答案

偶然发现了这个链接 WCF + REST: Where is the request data?并看到 Glenn 的响应是将一个流传递给该方法,然后用流阅读器将其撕成一个字符串以获取表单发布数据。

修改原型(prototype)服务代码如下

[OperationContract]
[WebInvoke
(UriTemplate="/BOB",
Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public string BOB (Stream streamdata)
{
StreamReader reader = new StreamReader(streamdata);
string res = reader.ReadToEnd();
reader.Close();
reader.Dispose();
return "Received: " + res;
}

这似乎可以解决问题,完整的 json 数组在流中传递,读入本地字符串,然后我可以使用 json.net 对其进行攻击以序列化到字典中/从字典中序列化以传递给业务逻辑.不是很漂亮,但很实用。

关于c# - WCF REST 服务 JSON 发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5384303/

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