在REST WCF中读取Http请求主体

时间:2010-06-16 01:09:44

标签: json web-services .net-4.0 httprequest wcf-rest

我在.net 4中运行了一个REST WCF服务,我测试了它正在运行的Web服务并接受我所做的HttpRequest。但是我在尝试访问Web服务中的HttpRequest主体时遇到了问题。我已经尝试使用Fiddler和我的WinForm应用程序发送附加在HttpRequest上的随机大小的数据,我似乎无法在运行时找到任何可以找到我的请求主体的对象。我最初的本能是查看HttpContext.Current.Request.InputStream,但该属性的长度为0,所以我试着查看IncomingWebRequestContext该对象甚至没有方法也没有属性来获取HttpRequest的主体

所以我的问题是,实际上是否有办法在WCF中访问HttpRequest请求主体?

PS: 请求体内的数据是JSON字符串,对于响应,它也会将响应体内的数据作为JSON字符串返回。

2 个答案:

答案 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>

或阅读WCF + REST: Where is the request data?