我正在开发一个简单的网络应用程序,我需要绑定所有类型的实现和特定类型的接口。我的界面只有一个这样的属性
public interface IContent {
string Id { get;set; }
}
使用此接口的通用类如下所示
public class Article : IContent {
public string Id { get;set; }
public string Heading { get;set; }
}
在这里要干净,文章类只是实现 IContent 的许多不同类之一,因此我需要一种通用的方法来存储和更新这些类型。
所以在我的控制器中,我有这样的 put 方法
public void Put(string id, [System.Web.Http.ModelBinding.ModelBinder(typeof(ContentModelBinder))] IContent value)
{
// Store the updated object in ravendb
}
和 ContentBinder
public class ContentModelBinder : System.Web.Http.ModelBinding.IModelBinder {
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) {
actionContext.ControllerContext.Request.Content.ReadAsAsync<Article>().ContinueWith(task =>
{
Article model = task.Result;
bindingContext.Model = model;
});
return true;
}
}
上面的代码不起作用,因为它似乎没有获取 Heading 属性,即使我使用默认模型绑定器它正确绑定了 Heading。
所以,在 BindModel 方法中,我想我需要根据 Id 从 ravendb 加载正确的对象,然后使用某种默认模型绑定器来更新复杂对象?这是我需要帮助的地方。