Search code examples
c#jsonrest

Formatting parameters for C# HttpClient.PostAsJsonAsync


I don't have experience with REST APIs but I inherited one that I need to develop a C# .NET Framework 4.71-based client for. I figured out how to invoke commands that don't need parameters. For example, I found this definition in the server (a C# .NET Framework 4.71 WPF GUI app which uses swagger):

  • openapi-full.json
"openapi": "3.0.1",
...
"paths": {

"/api/v1/Run/New": {
   "post": {
      "summary": "...",
      "description": "...",
      "tags": [
         "..",
         ".."
      ],
      "responses": {...}
   }
},

and found I could invoke it from the client I'm developing using:

HttpResponseMessage response = await client.PostAsJsonAsync("api/v1/Run/New", new object());

I get lost when the command requires a parameter:

"/api/v1/Tests": {         
   "put": {
      "summary": "...",
      "description": "...",
      "tags": [
         "...",
         "..."
      ],
      "requestBody": {
         "content": {
            "multipart/form-data": {
               "schema": { "$ref": "#/components/schemas/ListOfTestIds" }
            }
         }
      },
      "responses": {...}
   }
}

How would I pass a list of ints? More importantly, is there guidance online for translating requestBody syntax to PostAsJsonAsync parameters?


Solution

  • For your first question, client.PutAsJsonAsync("/api/v1/Tests", **reference to the int[] here**) should work for what you intend (note that the verb is PUT for that endpoint).

    As for your second question, a good answer as @Sebastian put it, is the openAPI-generator. Several topics on it already exist, such as this answer.

    EDIT: somehow missed that the PUT endpoint content is multipart/form-data - PutAsJsonAsync might not cut it here, in which case this thread could be helpful.