Egor Pavlikhin
Posted on March 10, 2020
Last week I was surprised to find out that .Net Core still doesn't support something that every JavaScript/TypeScript framework does: mapping JSON object to multiple action parameters just isn't supported. You are supposed to define a Model
class, add it as a single parameter and mark it with [FromBody]
.
{ "a": "a", "b": "b" }
This just didn't sit right with me. Why declare a whole new class for every single Action with just a few parameters. What do I need to do to have a controller method as simple as this?
[HttpPost]
public async Task SometMethod(string a, string b)
{
return Ok();
}
I couldn't find an answer, so I wrote my own package to do that.
You can download it here or view source here.
It's very simple, and quite slow for now (as it re-parses the whole request for every parameter), but does the job for simple cases.
Usage
Given JSON
{ "a": "a", "b": { "c": "value" } }
Step 1.
Add attribute JsonParameters
to your action
[HttpPost("two")]
[JsonParameters]
public async Task<IActionResult> TwoParameters(string a, dynamic b)
{
Console.WriteLine(b.c);
return Ok();
}
Step 2.
Enhoy simplified workflow.
Thanks
Thanks to tchivs for providing code to map to dynamic types
Posted on March 10, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
September 29, 2024