Чтение HttpRequest Body в REST WCF - PullRequest
2 голосов
/ 16 июня 2010

У меня есть служба REST WCF, работающая в .net 4, и я проверил веб-сервис, на котором она работает, и принимаю HttpRequest, который я создаю для него. Но я столкнулся с проблемой при попытке получить доступ к телу HttpRequest в веб-сервисе. Я попытался отправить данные произвольного размера, добавленные в HttpRequest, используя Fiddler и мое приложение WinForm, и я не могу найти объекты во время выполнения, где я могу найти тело моего запроса. Мой первоначальный инстинкт был искать в HttpContext.Current.Request.InputStream, но длина этого свойства равна 0, поэтому я попытался посмотреть в IncomingWebRequestContext, что у объекта нет ни метода, ни свойств, чтобы получить тело HttpRequest.

Итак, мой вопрос: есть ли способ получить доступ к телу запроса HttpRequest в WCF?

PS: Данные в теле запроса представляют собой строки JSON, и для ответа они также будут возвращать данные в теле ответа в виде строки JSON.

Ответы [ 2 ]

9 голосов
/ 26 мая 2011

Гораздо проще, этот ответ на WCF + REST: Где данные запроса? отлично работает.

Кроме того, если ваше тело запроса десериализуемо, вы можете просто пропустить класс. За исключением некоторых опечаток, это должно работать:

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!";
}

Выполнение POST с данными {"Colour": "blue", "Size": 5} к этому ресурсу должно вернуть "It's a blue banana!".

4 голосов
/ 16 июня 2010

Попробуйте с ((System.ServiceModel.Channels.BufferedMessageData)(((System.ServiceModel.Channels.BufferedMessage)((OperationContext.Current.RequestContext).RequestMessage)).MessageData)).Buffer

иметь тип System.ArraySegment<byte>

или прочитать WCF + REST: Где находятся данные запроса?

...