【问题标题】:nancyfx posting json - Nancy.DynamicDictionary is emptynancyfx 发布 json - Nancy.DynamicDictionary 为空
【发布时间】:2013-08-27 09:47:20
【问题描述】:

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

【问题讨论】:

    标签: asp.net nancy


    【解决方案1】:

    要发布数据,您必须使用model binding。 不幸的是,不支持模型绑定到动态,您必须创建请求类。有一个提议的workaround,但我自己没用过。

    如果您不想为特定请求定义类并使用模型绑定,那么您可以将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);
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-15
        • 2017-09-08
        • 2020-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多