【问题标题】:JSON Schema Validation in NancyFXNancyFX 中的 JSON 模式验证
【发布时间】:2016-02-19 01:20:01
【问题描述】:

我正在尝试使用 NancyFX 启动和运行 REST API,到目前为止,它看起来真的很酷,而且完全符合医生的规定!

有一件事我在任何地方都找不到。我想验证发送到我的 API 端点的 JSON,在我将它传递到端点之前,或者至少在我尝试绑定到模型之前。

任何人都可以将我指向博客文章或 wiki 的一部分,这可以帮助我。

谢谢

【问题讨论】:

    标签: .net json schema nancy


    【解决方案1】:

    如果你想这样做,那么你需要查看 Request.Body 并自己解析+验证它。您可以逐条路线进行,但让我们面对现实吧 - 这会令人麻木地无聊,而这与南希的全部意义相反。

    所以我建议你使用的是前钩子。 Before-hook 让您可以在传入请求被任何路由处理之前抓住它,并用它做任何您想做的事情 - 您甚至可以选择短路请求并直接从钩子返回响应。

    有两种Before-hooks;应用程序和模块。应用程序挂钩可让您在到达路由之前捕获任何传入请求,而模块挂钩可让您捕获将由指定挂钩的模块中的路由处理的任何传入请求。

    您可以在我们的 Wiki 上阅读有关钩子的更多信息

    希望对你有帮助

    【讨论】:

    • 嗨 TheCodeJunkie,这也是我所看到的,但据我所知,它将执行的路线在模块挂钩中不可用。每条路由都必须针对不同的模式进行验证。所以我想我可能会强制每个模型对象实现类似 ISchemaValidator 之类的东西,并将逻辑放在那里......无论如何,如果我发现我认为对其他人有益的东西,我会回来提供我的解决方案。
    • 我遇到的小麻烦是,我需要先从请求对象中读取正文流,然后才能验证 json。因此,当我准备绑定时:var customer = this.Bind<Customer>(); 我必须首先将流中的位置设置为 0,如下所示:Request.Body.Position = 0; 据我所知,我不能使用自定义验证器,因为验证器需要对象首先绑定,如果 JSON 不正确,这是不可能的。我现在在一条特定的路线内完成所有这些工作。有没有办法做类似Post["/customers", schema] = p => ...
    • 我发现我真正需要的是第三个钩子......一个Before Route Hook,它将在找到正确的路线时触发,但在采取行动之前。模式依赖于路由,因此无法将其添加到模型绑定器中。例如,我需要一个不同的 Patch 和 Put 架构,但它们都绑定到同一个模型。
    猜你喜欢
    • 2016-02-24
    • 2012-03-02
    • 2011-06-08
    • 2014-04-09
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2020-11-06
    相关资源
    最近更新 更多