Multiple controllers with same URL routes but different HTTP methods
<p>I've got a following two controllers:</p>

<pre><code>[RoutePrefix("/some-resources")
class CreationController : ApiController
{
    [HttpPost, Route]
    public ... CreateResource(CreateData input)
    {
        // ...
    }
}

[RoutePrefix("/some-resources")
class DisplayController : ApiController
{
    [HttpGet, Route]
    public ... ListAllResources()
    {
        // ...
    }

    [HttpGet, Route("{publicKey:guid}"]
    public ... ShowSingleResource(Guid publicKey)
    {
        // ...
    }
}
</code></pre>

<p>All three actions got in fact three different routes:</p>

<ul>
<li><code>GET /some-resources</code></li>
<li><code>POST /some-resources</code></li>
<li><code>GET /some-resources/aaaaa-bbb-ccc-dddd</code></li>
</ul>

<p>If I put them into single controller everything works just fine, however if I separate them (as shown above) WebApi throws following exception:</p>

<blockquote>
  <p>Multiple controller types were found that match the URL. This can
  happen if attribute routes on multiple controllers match the requested
  URL.</p>
</blockquote>

<p>This message is quite obvious. It seems WebApi does not take HTTP method into account when looking for a right candidate for controller/action.</p>

<p>How could I achieve the expected behavior?</p>

<hr>

<p><strong>UPDATE</strong>: I've digged a little into Web API internals and I understand that's the way it works by default. My goal is to separate the code and logic - in real world case those controllers have different dependencies and are a bit more complex. For the sake of maintenance, testability, project organization etc. they <em>should</em> be different objects (SOLID and stuff).</p>

<p>I thought I could override some WebAPI services (<code>IControllerSelector</code> etc) however this seems to be a little bit risky and non-standard approach for this simple and - as I assumed - common case.</p>