.net core .Net核心Api控制器继承

.net core .Net核心Api控制器继承,.net-core,asp.net-core-webapi,.net Core,Asp.net Core Webapi,我正在尝试创建一个可以跨多个API项目使用的API模块。我希望模块有一个控制器,该控制器具有一个可以根据实现API要求重写的操作 我有以下项目结构: Module -Controllers -ModuleController.cs -Interfaces -IModel.cs -Models -Model.cs API -Controllers -DerivedModuleController.cs

我正在尝试创建一个可以跨多个API项目使用的API模块。我希望模块有一个控制器,该控制器具有一个可以根据实现API要求重写的操作

我有以下项目结构:

Module
    -Controllers
        -ModuleController.cs
    -Interfaces
        -IModel.cs
    -Models
        -Model.cs

API
    -Controllers
        -DerivedModuleController.cs
IModel.cs

public interface IModel
    {
        int Id { get; set; }
    }
Model.cs

public class Model : IModel
    {
        public int Id { get; set; }
    }
ModuleController.cs

[Route("api/module/[action]")]
    public class ModuleController : Controller
    {
        [ActionName("GetModel")]
        [HttpGet("{id}")]
        public virtual Model GetModel(int id)
        {
            return new Model() { Id = id };
        }
    }
public class DerivedModuleController : ModuleController
    {
        public override Model GetModel(int id)
        {
            return base.GetModel(id);
        }
    }
DerivedModuleControl.cs

[Route("api/module/[action]")]
    public class ModuleController : Controller
    {
        [ActionName("GetModel")]
        [HttpGet("{id}")]
        public virtual Model GetModel(int id)
        {
            return new Model() { Id = id };
        }
    }
public class DerivedModuleController : ModuleController
    {
        public override Model GetModel(int id)
        {
            return base.GetModel(id);
        }
    }
API项目引用该模块。如果我删除DerivedModuleController,一切都会正常工作。我可以请求
/api/module/GetModel/1
,并获得有效结果。但是,当我添加DerivedModuleController时,它会失败,并出现以下错误:

AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:

Api.Controllers.DerivedModuleController.GetModel (Api)
Module.ModuleController.GetModel (Module)
最终,我希望能够从
derivedmulecontroller
获得一个扩展
Model
DerivedModel
,但我无法克服这个错误


有没有一种方法可以使用基本路由(
/api/module/GetModel/1
)来访问派生的ModuleController,而忽略ModuleController?

对我来说,这看起来像是过度工程、过度架构,您希望通过使用它获得什么好处“跨API的模块?似乎您只是在限制继承/实现模块的API,使其无法表达自己。什么时候会有这样一个公共模型,以至于API会扩展?我的印象是,您的模型太大,包含的数据太多,API操作应该简单、有限,并且只做一件事。不必在多个模型中重写模型属性,就不会有什么效果。您的一些模型可能有一些相同的get/setter,但这并不意味着继承是必要的needed@BrianOgden好处是,我可以导入模块并使用它,但也可以根据特定需求实现自定义逻辑。这只是模块的API部分,模块还将包含一个客户端元素,该元素在API上引用这些操作。使用这种方法,我不需要为了使用api而完全修改客户端。我不同意您的逻辑,您所做的似乎是RESTful api设计的新手,如果我错了,请原谅我,一个客户端使用的api的URL类似于/user或/company或/accountsummary,HTTP动词GET、POST、PUT、DELETE,您的模块与客户机无关,也不可以称为后端API模块,甚至有一个客户端元素,如果您管理一个后端API有一个客户机侧元素,您现在紧密耦合并击败了N层架构的目的,也许考虑,甚至停止使用Word模块。这里有一个带控制器和模型的API这里没有提供解决方案,也没有回答我的问题,所以我不认为继续这样来回有什么意义。