title: Web API 2.2, Inherited Controller with Route Overrides (Is this possible)?
body: <p>So I have a generic base controller implementing CRUD, which derives from <code>APIController</code>.</p>
  
  <pre><code>public class GenericController&lt;TEntity&gt; : ApiController where TEntity : class {
  
      private readonly GenericModel&lt;TEntity&gt; _model;
  
      public IModel Model {
          get { return _model; }
      }
  
      public GenericController(IGenericModel&lt;TEntity&gt; model) {
          _model = (GenericModel&lt;TEntity&gt;)model;
      }
  
      [HttpPost, Route]
      public IHttpActionResult Post(TEntity entity) {
          TEntity newEntity = _model.Create(entity);
          String urlLink = $"{Request.RequestUri}{RequestContext.VirtualPathRoot}{((IGenericEntity)newEntity).ID}";
          return Created(urlLink, newEntity);
      }
  
      [HttpGet, Route]
      public IHttpActionResult GetList() {
          return Ok(_model.ReadList());
      }
  
      [HttpGet, Route("{ID:int}")]
      public IHttpActionResult Get(Int64 ID) {
          return Ok(_model.Read(ID));
      }
  
      [HttpPut, Route]
      public IHttpActionResult Put(TEntity entity) {
          _model.Update(entity);
          return Ok();
      }
  
      [HttpDelete, Route("{ID:int}")]
      public IHttpActionResult Delete(Int64 ID) {
          _model.Delete(ID);
          return Ok();
      }
  
  }
  </code></pre>
  
  <p>And have allowed controller inheritance via a <code>CustomDirectRouteProvider</code> as such:</p>
  
  <pre><code>config.MapHttpAttributeRoutes(new CustomDirectRouteProvider());
  </code></pre>
  
  <p>Where my CustomDirectRouteProvider is:</p>
  
  <pre><code>public class CustomDirectRouteProvider : DefaultDirectRouteProvider {
      protected override IReadOnlyList&lt;IDirectRouteFactory&gt; GetActionRouteFactories(HttpActionDescriptor actionDescriptor) {
          return actionDescriptor.GetCustomAttributes&lt;IDirectRouteFactory&gt; (inherit: true);
      }
  }
  </code></pre>
  
  <p>And this all works beautifully, until I want to override methods like POST. As an example:</p>
  
  <pre><code>[RoutePrefix(@"api/Test")]
  public class DerivedController : GenericController&lt;ConcreteEntity&gt; {
  
      public DerivedController (IGenericModel&lt;ConcreteEntity&gt; model) : base(model) {
      }
  
      [HttpPost, Route]
      public new IHttpActionResult Post(ConcreteEntity entity) {
          //New Post Functionality Here
      }
  
  }
  </code></pre>
  
  <p>At which point I get the error:</p>
  
  <pre><code>"Multiple actions were found that match the request"
  </code></pre>
  
  <p>So my question is, how can I override the route itself? I basically want my new POST to take precedence over the generic one. I thought by virtue of the generic route/method being hidden that this would just work, but alas I was incorrect in my thinking.</p>