Hey I would like to achieve something that with dynamic parameters.
For example I have this Controller Action:
[HttpGet]
public async Task TestParam(string firtname, string lastname, string persnr)
{
Console.WriteLine("Firstname: " firtname);
Console.WriteLine("Lastname: " lastname);
Console.WriteLine("Persnr: " persnr);
}
Is it possible that my request can look like this:
Url | Firstname | Lastname | Persnr |
---|---|---|---|
URL/?firtname=Test&lastname=Test&persnr=123 |
Test | Test | 123 |
URL/?firtname=Test&persnr=123 |
Test | 123 | |
URL/?lastname=Test&persnr=123 |
Test | 123 | |
URL/?persnr=123 |
123 |
So basically that I don't have to write all parameters?
Because if I make them optional with
TestParam(string firtname = "", string lastname = "", string persnr = "")
I have to write the url like that
URL/?firtname=&lastname=&persnr=123
to only see the persnr.
What is the best way to achieve this?
CodePudding user response:
You can create a model class for your query parameters like this:
public class TestQuery
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Persnr { get; set; }
}
Then you can replace your TestParam
signature like this:
public async Task TestParam([FromUri]TestQuery queryParams)
For more information please check this MSDN article.
CodePudding user response:
The Answer from Peter Csala worked but I'll have a second solution.
[HttpGet("{uri}")]
public async Task<string> TestParam(string uri)
{
Uri myUri = new Uri("http://localhost:2000/?" uri);
string firstname = HttpUtility.ParseQueryString(myUri.Query).Get("firstname");
string lastname = HttpUtility.ParseQueryString(myUri.Query).Get("lastname");
string persnr = HttpUtility.ParseQueryString(myUri.Query).Get("persnr");
Console.WriteLine("Firstname: " firtname);
Console.WriteLine("Lastname: " lastname);
Console.WriteLine("Persnr: " persnr);
}
This will read all parameters your write in the uri. For example lastname is not set in the uri it will be empty.