WebApi2属性路由inheritance了控制器
我正在尝试使用基本控制器创建基本的REST API,如下所示:
基类:
public abstract class WebApiEntityController : ApiController where TEntity : EntityBase { private readonly IRepository _repository; protected WebApiEntityController(IRepository repository) { _repository = repository; } [Route("")] [WebApiUnitOfWork] public HttpResponseMessage Get() { return Request.CreateResponse(HttpStatusCode.OK, _repository.ToList()); } [..........]
派生类:
[RoutePrefix("api/TimesheetTask")] public class TimesheetTaskController : WebApiEntityController { private readonly IRepository _timeSheetTaskRepository; public TimesheetTaskController(IRepository timeSheetTaskRepository) : base(timeSheetTaskRepository) { _timeSheetTaskRepository = timeSheetTaskRepository; } }
但是在路由〜/ api / TimesheetTask /上调用GET导致找不到404。
根据这个答案,属性路由不能被inheritance。 所以我的问题是,如何为所有域模型编写一致的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的下一步将涉及支持查询,这很容易变得复杂。 有没有为您生成这些路线的图书馆? 如果有人能帮我找到这样的图书馆,我将不胜感激。
你引用的答案已经更新了。 从WebApi 2.2开始,他们创建了一个可扩展点,以允许您想要的function。 属性路径可以inheritance,但您需要对其进行配置。 我对基本API控制器有相同的要求,并且在搜索后遇到了您引用的相同答案。
.NET WebAPI属性路由和inheritance
您需要覆盖DefaultDirectRoutePrivider
:
public class WebApiCustomDirectRouteProvider : DefaultDirectRouteProvider { protected override System.Collections.Generic.IReadOnlyList GetActionRouteFactories(System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor) { // inherit route attributes decorated on base class controller's actions return actionDescriptor.GetCustomAttributes (inherit: true); } }
完成后,您需要在Web api配置中进行配置
上述就是C#学习教程:WebApi2属性路由inheritance了控制器分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static class WebApiConfig { public static void Register(HttpConfiguration config) { ..... // Attribute routing. (with inheritance) config.MapHttpAttributeRoutes(new WebApiCustomDirectRouteProvider()); .... } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1011161.html