您可以在 Nancy 中拥有多个自定义模型绑定器吗?我需要绑定来自不符合我们当前“mvc 风格”自定义模型绑定器的数据表 jQuery 插件的服务器端处理请求。特别是关于列表,数据表将它们显示为 mylist_0、mylist_1 等,而不是 mylist [0]、mylist [1]。
那么我可以添加另一个模型绑定器来处理这些不同的列表样式吗?如果我这样做了,南希怎么知道要使用哪个?
您可以在 Nancy 中拥有多个自定义模型绑定器吗?我需要绑定来自不符合我们当前“mvc 风格”自定义模型绑定器的数据表 jQuery 插件的服务器端处理请求。特别是关于列表,数据表将它们显示为 mylist_0、mylist_1 等,而不是 mylist [0]、mylist [1]。
那么我可以添加另一个模型绑定器来处理这些不同的列表样式吗?如果我这样做了,南希怎么知道要使用哪个?
您可以将自定义 ModelBinder 添加到您的项目中来处理您正在谈论的类的绑定。
using System;
using System.IO;
using Nancy;
namespace WebApplication3
{
public class CustomModelBinder : Nancy.ModelBinding.IModelBinder
{
public object Bind(NancyContext context, Type modelType, object instance = null, params string[] blackList)
{
using (var sr = new StreamReader(context.Request.Body))
{
var json = sr.ReadToEnd();
// you now you have the raw json from the request body
// you can simply deserialize it below or do some custom deserialization
if (!json.Contains("mylist_"))
{
var myAwesomeListObject = new Nancy.Json.JavaScriptSerializer().Deserialize<MyAwesomeListObject>(json);
return myAwesomeListObject;
}
else
{
return DoSomeFunkyStuffAndReturnMyAwesomeListObject(json);
}
}
}
public MyAwesomeListObject DoSomeFunkyStuffAndReturnMyAwesomeListObject(string json)
{
// your implementation here or something
}
public bool CanBind(Type modelType)
{
return modelType == typeof(MyAwesomeListObject);
}
}
}
如果CustomModelBinder
未检测到(发生在我身上),您可以尝试在以下位置覆盖它CustomBootstrapper
:
protected override IEnumerable<Type> ModelBinders
{
get
{
return new[] { typeof(Binding.CustomModelBinder) };
}
}