使用Web Api进行ObjectId模型绑定2

时间:2013-12-30 15:33:12

标签: asp.net-web-api model-binding

我正在将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集合应该包含什么,但是我很难找到我插入的绑定器。

1 个答案:

答案 0 :(得分:3)

使用WebAPI,即使您注册了模型绑定器,仍然需要将[ModelBinder]附加到输入参数,您不必再指定类型,因此您的方法现在看起来像这样:

[Route("{id}")]
public HttpResponseMessage Get(String type, [ModelBinder]ObjectId id) {

如果您想在每次声明此类型的参数时跳过添加属性,那么您必须查看编写自定义IActionValueBinder(如果您只是扩展DefaultActionValueBinder,这可以非常简单),这是默认实现。您可能希望查看此帖子以获取指示:

http://www.strathweb.com/2013/04/asp-net-web-api-parameter-binding-part-1-understanding-binding-from-uri/