title: HTTP PUT Failing on IIS 8.5
body: <p>This seems to be getting deeper into IIS than I'm good at! So I have a Web API controller that is working great for GET and POST. The first screenshot shows a handling of a GET. Everything was great I get a response.</p>
  
  <p><a href="https://i.imgur.com/pZwWSwc.jpg" rel="noreferrer">View Full Size</a>
  <img src="https://i.imgur.com/pZwWSwc.jpg" alt="Success Detail"></p>
  
  <p>But then I make a PUT request and it all falls apart. It seems to cruise through the ManagedPipelineHandler and then falls through to the DefaultDocumentModule and fails with a 405.</p>
  
  <p><a href="https://i.imgur.com/wiQPwrs.jpg" rel="noreferrer">View Full Size</a>
  <img src="https://i.imgur.com/wiQPwrs.jpg" alt="Fail Summary"></p>
  
  <p><a href="https://i.imgur.com/VaZqkW4.jpg" rel="noreferrer">View Full Size</a>
  <img src="https://i.imgur.com/VaZqkW4.jpg" alt="Fail Details"></p>
  
  <p>There is no WebDAV installed and I've tried to remove it anyway at the web.config level. Handlers are overridden to support PUT.</p>
  
  <pre><code>&lt;handlers&gt;
    &lt;remove name="ExtensionlessUrlHandler-Integrated-4.0" /&gt;
    &lt;remove name="OPTIONSVerbHandler" /&gt;
    &lt;remove name="TRACEVerbHandler" /&gt;
    &lt;add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" /&gt;
  &lt;/handlers&gt;
  </code></pre>
  
  <p>Despite this the request is failing to be handled by ASP.NET and I'm looking for some ideas on debugging? Here is the action method that fails, the PUT and one that works, a GET.</p>
  
  <pre><code>public class ProductsController : ApiController
  {
      [HttpPut]
      [Route("api/products")]
      public AddProductResponse AddProduct(AddProductRequest request)
      {
          return new AddProductResponse(); 
      }
  
      [HttpGet]
      [Route("api/products/manufacturers")]
      public ManufacturersResponse GetProductManufacturers()
      {
          var productService = new ProductService();
          var manufacturers = productService.GetManufacturers();
          return new ManufacturersResponse { Manufacturers = manufacturers.OrderBy(m =&gt; m.BusinessName) };
      }
  }
  </code></pre>
  
  <p>Seems I missed the hand off early in the request lifecycle.</p>
  
  <p>FREB seems to show the GENERAL_SHILD_REQUEST_START for the PUT, not sure why the managed pipeline is creating that extra child request that ultimately falls to the DefaultDocumentModule which can't handle a PUT.</p>