我正在将MongoDB与ASP.NET Web Api(2)应用程序一起使用,并希望在Web Api方法中接受ObjectId参数。
我为ObjectId类型编写了一个自定义模型绑定器,当它添加到控制器的Get方法时,一切正常。
[Route("{id}")]
public HttpResponseMessage Get(String type, [ModelBinder(typeof(ObjectIdModelBinder))]ObjectId id) {
但我需要在几个方法和控制器中执行此操作,因此我宁愿将其置于中心位置。我已经读过,我可以像这样集中注册活页夹:
public static void Register(HttpConfiguration config) {
var provider = new SimpleModelBinderProvider(typeof(ObjectId), new ObjectIdModelBinder());
config.Services.Insert(typeof(ModelBinderProvider), 0, provider);
}
但那不起作用!
有什么想法吗?不确定config.Services集合应该包含什么,但是我很难找到我插入的绑定器。
答案 0 :(得分:3)
使用WebAPI,即使您注册了模型绑定器,仍然需要将[ModelBinder]附加到输入参数,您不必再指定类型,因此您的方法现在看起来像这样:
[Route("{id}")]
public HttpResponseMessage Get(String type, [ModelBinder]ObjectId id) {
如果您想在每次声明此类型的参数时跳过添加属性,那么您必须查看编写自定义IActionValueBinder(如果您只是扩展DefaultActionValueBinder,这可以非常简单),这是默认实现。您可能希望查看此帖子以获取指示: