【问题标题】:ObjectId Model Binding with Web Api 2ObjectId 模型与 Web Api 2 的绑定
【发布时间】:2014-01-17 12:22:06
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    使用 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/

    【讨论】:

      猜你喜欢
      • 2016-05-23
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多