nancyfx публикует json - Nancy.DynamicDictionary пуст

Я только начинаю играть с NancyFx, чтобы сравнить его с материалом .net MVC WebAPI, и я сразу столкнулся с проблемой. Насколько я понимаю, Нэнси должна обрабатывать сериализацию прямо из коробки. Но я не могу заставить его работать.

У меня есть модуль Нэнси, который выглядит так:

public class HelloWorld : NancyModule
{
    public HelloWorld()
    {
        Post["/"] = parameters =>
            {
                var myFieldValue = parameters.myField;
                return HttpStatusCode.OK;
            };
    }
}

И я публикую его с помощью Fiddler следующим образом:

Headers:
    User-Agent: Fiddler
    Content-Type: application/json
    Host: localhost:3141
    Content-Length: 24
Request-Body: 
    {"myField" : "profit"}

Однако, когда объект параметров пуст (и, следовательно, объект myFieldValue). Я уверен, что пропустил что-то действительно очевидное, но я не знаю, что!


person stevef4000    schedule 24.08.2013    source источник


Ответы (2)


Параметры предназначены для захвата в URL-адресе (например, /foo/{bar} будет захватывать переменную bar в параметрах. Если вы публикуете JSON, вы должны использовать связыватель модели (var foo =this.Bind();

Я бы порекомендовал также взглянуть на документы. Там все это описано :-)

person Steven Robbins    schedule 24.08.2013

Для публикации данных необходимо использовать привязку модели. К сожалению, привязка модели к динамической не поддерживается, и вам придется создавать классы запроса. Существует предложенный обходной путь , но я сам им не пользовался.

Если вы не хотите определять класс для конкретного запроса и использовать привязку модели, вы можете использовать силу dynamic с json.net. Пример:

public AuthTokenModule (IAuthService authService, UserMapper mapper) : base ("api/v1/authToken")
    {
        Post ["/login"] = x => {
            dynamic request = JsonConvert.DeserializeObject (Request.Body.AsString ());

            var user = mapper.ValidateUser ((string)request.email, (string)request.password);
person Igor Yalovoy    schedule 01.06.2015