2016-07-18 2 views
1

быстрый вопрос. Я использую Nancy для преобразования вызовов REST в вызовы api в проекте, над которым я работаю. Я не могу заставить его работать.C# получение HTTP корпус используя Nancy

У меня есть установка и работа Nancy, для запросов GET это нормально. Однако, когда я делаю запрос POST с помощью встроенного в RestClient, как:

  restClient.Post("/test", "Param"); 

Я не могу понять, как получить «Param» один раз вызов был сделан.

Я имею установку NancyModule как таковой:

public class TestNancyModule : NancyModule { 
    public TestNancyModule() { 
     Post["/test"] = p => { 
      for(KeyValuePair<dynamic, dynamic> kvp in (DynamicDictionary)p) 
       Console.WriteLine("{0}:{1}", kvp.Key, kvp.Value); 
     } 
    } 
} 

У меня есть точки останова установки внутри NancyModule, которая становится удар, когда я делаю пост запрос на локальный/тест, но я не могу для жизнь меня выясняет, как извлечь «Парама», как только я буду внутри модуля Нэнси. В идеале я мог бы просто сделать что-то вроде

string POSTParameters = p["Value"] 
    //POSTParameters now equals "Param" 

Любые предложения?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Edit: Я уезжаю оригинальный пост, но Я уточню здесь. Я хотел спросить, как получить доступ к телу HTTP входящих запросов. Неспособность к протоколу привела к некоторым ошибкам с моей стороны, используя неправильную терминологию.

ответ

2

Вы можете использовать .AsString() на теле, если вы тянете в Nancy.Extensions

var thing = Request.Body.AsString(); 

Это путь Нэнси.

+0

Спасибо! Это гораздо лучший способ сделать это. –

+1

метод AsString() не существует. Нэнси 1.4 –

1

Понял, что он доступен в поле «Запрос».

Для кода я могу получить тело, делая что-то вроде

  byte[] response = new byte[Request.Body.Length]; 
      Request.Body.Read(response, 0, (int)Request.Body.Length); 

и

  string POSTParameters = System.Text.Encoding.Default.GetString(response); 

это именно то, что я искал. Если бы тело было более сложным, я бы не рекомендовал делать это, но я только собираюсь передать отдельные слова для этого сообщения.

0

Для параметров запроса вы можете использовать объект Request Nancy в модуле.

var queryParam = this.Request.Query.ParamName; 

Для фактического почтового тела вы можете использовать

this.Bind(); 

, который будет создавать динамический со свойствами, указанными в организме. не

3

В новых версиях NancyFx (1.4+), вы можете использовать это решение:

using Nancy.IO; 
... 
var yourString = RequestStream.FromStream(Request.Body).AsString(); 

в то время как

var yourString = Request.Body.AsString(); 

поддерживается не более.

Смежные вопросы