Forum Discussion

evosus's avatar
evosus
Occasional Contributor
9 years ago
Solved

Interactive API Docs / POST body data omitted using consumes 'application/x-www-form-urlencoded'

Steps to duplicate:   Take for example this api which defines a method capable of consuming application/x-www-form-urlencoded and text/plain: https://swaggerhub.com/api/evosus/webapi/1.3.0 POST /...
  • evosus's avatar
    evosus
    9 years ago

    I got to the bottom of the problem. I can't argue with your observation that I don't have CORS enabled since it was throwing the CORS error. Specifically an error during the preflight request. Preflight is the key word.

     

    A pre-flight request is only associated with a complex CORS request and not a simple CORS request. My request WAS simple when my content-type was x-www-form-urlencoded. When I changed my request to content-type application/json the CORS requirement, by definition, changed to COMPLEX. This is explained in the excellent HTMLRocks CORS topic (http://www.html5rocks.com/en/tutorials/cors/).

     

    I had the CORS headers, as shown above on my POST request. However, the preflight request uses the OPTIONS verb. My web service did not handle the OPTIONS verb. Now it does. Now it works.

     

    Most web service implementations will probably find it easiest to implement the handling of OPTIONS calls using a request filter. Check for the OPTIONS verb and short-circuit the request with a null response prior to route handling. Alternately you can implement an OPTIONS verb in the route handler in addition to your other http verbs. The calling web site only needs to see the proper headers in the response.

      

    Thanks for your support.