c# - MVC Abstract Base Controller Override modelbinding 参数类型

标签 c# asp.net-mvc model-binding oop

为简单起见,假设我有以下抽象基 Controller 类:

public abstract class RESTController : Controller
{      
    public abstract JsonResult List();
    public abstract JsonResult Get(Guid id);
    public abstract JsonResult Create(object obj);
    public abstract JsonResult Update(object obj);
    public abstract JsonResult Delete(Guid Id);
}

对于创建和更新方法,我不仅要覆盖方法,还要覆盖参数的类型。

通常我会像这样使用泛型:

public abstract JsonResult Create<T>(T obj);

但是这是一个 MVC 操作,无法指定类型参数。

我有哪些选择?如果我将其保留为 (object obj),MVC 模型绑定(bind)器能否正常工作?

var model = obj as MyViewModel;

无论如何,这都不是很干净。任何帮助将不胜感激。

最佳答案

行中的一些东西怎么样:

public abstract class RESTController<T> : Controller
{      
    public abstract JsonResult List();
    public abstract JsonResult Get(Guid id);
    public abstract JsonResult Create(T obj);
    public abstract JsonResult Update(T obj);
    public abstract JsonResult Delete(Guid Id);
}

并且在覆盖时:

public FooController: RESTController<Foo>
{
    ...
    public override JsonResult Create(Foo obj)
    {
        throw new NotImplementedException();
    }
    ...
}

关于c# - MVC Abstract Base Controller Override modelbinding 参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4059543/

相关文章:

c# - 从母版页调用函数

asp.net-mvc-3 - ASP.NET MVC 3 JSONP : Does this work with JsonValueProviderFactory?

c# - 带下划线的 MVC 3 模型绑定(bind)

c# - 修剪最后一次正则表达式匹配之前的所有文本

c# - 在线程之间共享字典中的数据

c# - 说明如何使用 FirstDisplayedScrollingRowIndex

javascript - Bootbox 回调表单提交无法正常工作

asp.net-mvc - 如何使用 Owin/Open ID Connect 添加其他 Azure AD 属性作为声明

asp.net-mvc - Web API和ASP MVC之间的主要区别是什么

asp.net-mvc - 使用复杂数据类型的集合调用 UpdateModel 会重置所有非绑定(bind)值吗?