我在.net 4中运行了一个REST WCF服务,我测试了它正在运行的Web服务并接受我所做的HttpRequest。但是我在尝试访问Web服务中的HttpRequest主体时遇到了问题。我已经尝试使用Fiddler和我的WinForm应用程序发送附加在HttpRequest上的随机大小的数据,我似乎无法在运行时找到任何可以找到我的请求主体的对象。我最初的本能是查看HttpContext.Current.Request.InputStream
,但该属性的长度为0,所以我试着查看IncomingWebRequestContext
该对象甚至没有方法也没有属性来获取HttpRequest的主体
所以我的问题是,实际上是否有办法在WCF中访问HttpRequest请求主体?
PS: 请求体内的数据是JSON字符串,对于响应,它也会将响应体内的数据作为JSON字符串返回。
答案 0 :(得分:9)
更简单,WCF + REST: Where is the request data?上的这个答案很好。
此外,如果您的请求正文可以反序列化,那么您只需传递一个类。除非有一些错别字,这应该有效:
public class Banana
{
public string Colour;
public int Size;
}
...
[WebInvoke(
Method = "POST",
UriTemplate = "bananas",
ResponseFormat=WebMessageFormat.Json,
RequestFormat=WebMessageFormat.Json)]
string CreateBanana(Banana banana);
...
public string CreateBanana(Banana banana)
{
return "It's a " + banana.Colour + " banana!";
}
使用数据{"Colour": "blue", "Size": 5}
对此资源执行POST应返回"It's a blue banana!"
。
答案 1 :(得分:4)
尝试使用((System.ServiceModel.Channels.BufferedMessageData)(((System.ServiceModel.Channels.BufferedMessage)((OperationContext.Current.RequestContext).RequestMessage)).MessageData)).Buffer
它的类型为System.ArraySegment<byte>