OData Collection Parameter bindings ... do they actually work?
<p>According to the docs here ...</p>

<p><a href="http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v3/odata-actions" rel="noreferrer">http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v3/odata-actions</a></p>

<p>... </p>

<blockquote>
  <p>Binding an Action to an Entity Set</p>
  
  <p>In the previous example, the action is bound to a single entity: The
  client rates a single product. You can also bind an action to a
  collection of entities. Just make the following changes:</p>
  
  <p>In the EDM, add the action to the entity's Collection property.</p>
  
  <p>var rateAllProducts =
  builder.Entity().Collection.Action("RateAllProducts"); In the
  controller method, omit the key parameter.</p>
  
  <p>[HttpPost] public int RateAllProducts(ODataActionParameters
  parameters) {
      // .... }</p>
</blockquote>

<p>Why when I do this does it not work ...</p>

<p>Invoice Ref:</p>

<pre><code>public class InvoiceReference
{
    public string InvoiceNumber { get; set; }
    public int SupplierId { get; set; }
}
</code></pre>

<p>Action setup:</p>

<pre><code>var getByRefs = Builder.EntityType&lt;SIHead&gt;().Collection.Action("ByRefs");
getByRefs.CollectionParameter&lt;InvoiceReference&gt;("refs");
getByRefs.ReturnsCollectionFromEntitySet&lt;SIHead&gt;("SIHead");
</code></pre>

<p>Action method in the controller:</p>

<pre><code>[HttpPost]
[EnableQuery]
[ODataRoute("ByRefs")]
public async Task&lt;IHttpActionResult&gt; ByRefs(ODataActionParameters p)
{
   var refs = p["refs"] as InvoiceReference[];
   // exception p is null
}
</code></pre>

<p>Example json content posted:</p>

<pre><code>[
  {
    "InvoiceNumber": "5100011759|9800006622",
    "SupplierId": 2
  },
  {
    "InvoiceNumber": "5100012624|9800006635",
    "SupplierId": 2
  },
  {
    "InvoiceNumber": "5100012625|9800006636",
    "SupplierId": 2
  }
]
</code></pre>

<p>Seems to me that either I missed something or OData is broken.</p>