我试图创建基本的REST API与基本控制器,像这样:WebApi2属性继承路由控制器
基类:
public abstract class WebApiEntityController<TEntity> : ApiController
where TEntity : EntityBase<TEntity, int>
{
private readonly IRepository<TEntity> _repository;
protected WebApiEntityController(IRepository<TEntity> repository)
{
_repository = repository;
}
[Route("")]
[WebApiUnitOfWork]
public HttpResponseMessage Get()
{
return Request.CreateResponse(HttpStatusCode.OK, _repository.ToList());
}
[..........]
派生类:
[RoutePrefix("api/TimesheetTask")]
public class TimesheetTaskController : WebApiEntityController<TimesheetTask>
{
private readonly IRepository<TimesheetTask> _timeSheetTaskRepository;
public TimesheetTaskController(IRepository<TimesheetTask> timeSheetTaskRepository) : base(timeSheetTaskRepository)
{
_timeSheetTaskRepository = timeSheetTaskRepository;
}
}
但调用GET路由〜/ api/TimesheetTask /结果404找不到。
根据this回答,属性路由不能被继承。所以我的问题是,如何为所有域模型编写一致的API,而无需复制和粘贴代码?
我知道我可以做常规路由与此配置:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
但后来我不得不指定动作,和我的终点将是
/api/{controller]/Get
/api/{controller]/Post
,我不想要那个。我也可以删除routeTemplate的{action}
部分,但是我将如何路由到自定义操作?
如果任何人都可以帮助,那将不胜感激。另外,我的域模型API的下一步将涉及支持查询,并且这可能很容易变得复杂。有没有一个库为你生成这些路线?如果任何人都可以帮我找到这样的图书馆,将不胜感激。