2013-03-21 70 views
0

我想使用NancyFX启动并运行REST API,并且到目前为止它看起来非常酷,而且正是医生开的处方!NancyFX中的JSON模式验证

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

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

感谢

回答

0

如果你想做到这一点,那么你需要看看Request.Body和解析+自己验证。你可以按照路线进行,但是让我们面对它吧 - 这将会令人厌烦,而这与南希所讲的完全相反。

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

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

你可以阅读更多关于钩子上我们的Wiki

希望这有助于

+0

嗨TheCodeJunkie, 这也是我所看到的,但从我所看到的,它将执行的路由不可用的模块挂钩。每条路线都必须根据不同的模式进行验证。所以我认为我可能会强制每个模型对象实现类似于ISchemaValidator的东西,并将逻辑放在那里......无论如何,如果我发现某些我认为对他人有益的东西,我会回来使用我的解决方案。 – 2013-03-22 09:48:50

+0

我遇到的一个小问题是,我需要在请求对象中读取正文流,然后才能验证json。 所以,当我准备好绑定: 'VAR的客户= this.Bind ();' 我必须先设置流中的位置为0,像这样: 'Request.Body.Position = 0; ' 据我所知,我不能使用自定义验证程序,因为验证程序需要首先绑定对象,并且如果JSON不正确,则这是不可能的。 我现在在一条特定的路线内完成所有这些工作。有没有办法做到像 'Post [“/ customers”,schema] = p => ...' – 2013-03-22 14:00:52

+0

我发现我真正需要的是第三个钩子......一个Before Route Hook,在找到正确的路线时,但在采取措施之前触发。模式依赖于路由,因此将其添加到模型活页夹中将不会执行。例如,我需要一个用于Patch和Put的不同模式,但它们都绑定到相同的模型。 – 2013-06-29 11:04:51