Csharp/C#教程:WebApi2属性路由inheritance了控制器分享


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

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐