【发布时间】:2017-01-17 22:52:00
【问题描述】:
我有一个 post 路由,它在请求正文中接受一些 JSON 有效负载。
Post["/myroute/}"] = _ =>
{
try
{
var model = this.Bind<MyModel>();
}
catch (ModelBindingException e)
{
//PropertyBindException list is empty here,
//so only the first exception can be handled...
}
}
如果有多个无效数据类型(即,如果在 MyModel 中定义了多个 int 属性,并且用户为这些属性发布了字符串),我想传回这些错误的一个很好的列表,类似于如何使用 ModelState普通 ASP.NET MVC 应用程序中的字典。
在尝试将请求正文中的 JSON 有效负载绑定到 NancyFX 中的模型时,如何完成此类异常处理?
更新:
在这里查看 Nancy 源中的 DefaultBinder: https://github.com/sloncho/Nancy/blob/master/src/Nancy/ModelBinding/DefaultBinder.cs
我看到的问题是在这个块中:
try
{
var bodyDeserializedModel = this.DeserializeRequestBody(bindingContext);
if (bodyDeserializedModel != null)
{
UpdateModelWithDeserializedModel(bodyDeserializedModel, bindingContext);
}
}
catch (Exception exception)
{
if (!bindingContext.Configuration.IgnoreErrors)
{
throw new ModelBindingException(modelType, innerException: exception);
}
}
Deserialize 调用似乎是“全有或全无”,它由普通异常处理,而不是 ModelBindException,所以我在这里也看不到任何 PropertyBindExceptions。
我是否需要为此实现一些自定义的东西...?
【问题讨论】:
-
我遇到了同样的问题。 stackoverflow.com/questions/26107656/… 展示了一种忽略单个解析错误的简单方法,您甚至可以单独捕获它们。因此,在我看来,您需要使用此方法实现自己的 IBodyDeserializer。
标签: c# json model-binding nancy