4

我刚开始使用 NancyFx 将它与 .net MVC WebAPI 的东西进行比较,我马上就遇到了问题。据我了解,南希应该直接开箱即用地处理序列化。但我似乎无法让它工作。

我有一个看起来像这样的 Nancy 模块:

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 对象也是如此)。我确定我错过了一些非常明显的东西,但我不知道是什么!

4

2 回答 2

9

参数用于在 url 中捕获(例如 /foo/{bar} 将捕获参数中的 bar 变量。如果您发布 JSON,您应该使用模型绑定器(var foo =this.Bind();

我建议也看一下文档。所有这些都在那里介绍:-)

于 2013-08-24T12:27:37.793 回答
4

要发布数据,您必须使用模型绑定。不幸的是,不支持模型绑定到动态,您必须创建请求类。有一个建议的解决方法,但我自己没有使用它。

如果您不想为特定请求定义类并使用模型绑定,那么您可以使用dynamicjson.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);
于 2015-06-01T10:36:28.240 回答