【发布时间】:2019-08-30 03:36:24
【问题描述】:
我想在 webapi 2 网站上有一个 Controller Hierarchy 程序集来处理常见的 CRUD 服务操作。
我从一个像这样的抽象 webapi 类开始(为简单起见,我删除了不必要的代码和注入):
public abstract class EntityController<T> : ApiController {
[Route("GetAll")]
[HttpGet]
public IHttpActionResult GetAll()
{
//code
}
[Route("Add")]
[HttpPost]
public IHttpActionResult Add(T entity)
{
//code
}
[Route("Delete")]
[HttpDelete]
public IHttpActionResult Delete(T entity)
{
//code
}
[Route("Edit")]
[HttpPost]
public IHttpActionResult Edit(T entity)
{
//code
}
}
首先,我注意到如果我们在外部程序集中有控制器,则无法正确解析路由。我找到了这篇文章:
https://www.strathweb.com/2012/06/using-controllers-from-an-external-assembly-in-asp-net-web-api/
当我应用建议的更改时,路线不使用“路线”属性。 IE。如果我有以下派生类:
[RoutePrefix("api/thebooks")]
public class BookController : EntityController<Book>
{
public BookController() : base()
{
}
}
控制器前缀是 api/book 而不是 api/thebooks,如果我尝试调用“添加”,则会出现异常:
找到多个与请求匹配的操作:
添加类型 [...]
编辑类型 [...]
查找类型 [...]
如何表明我将在继承的控制器上使用 Route 和 RoutePrefix 属性?
提前致谢!!!
【问题讨论】:
-
如果您向我们展示您的路线配置,将会很有帮助。还请告诉我们您用
[...]掩盖的类型。
标签: c# asp.net asp.net-web-api