【发布时间】:2014-09-17 10:52:57
【问题描述】:
我正在尝试使用这样的基本控制器创建基本的 REST api:
基类:
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;
}
}
但是在路由 ~/api/TimesheetTask/ 上调用 GET 会导致 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 的下一步将涉及支持查询,这很容易变得复杂。是否有为您生成这些路线的库?如果有人能帮我找到这样的图书馆,将不胜感激。
【问题讨论】:
标签: c# asp.net routing asp.net-web-api asp.net-web-api2