skip to Main Content

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?

2

Answers


  1. Chosen as BEST ANSWER

    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.

    HttpUtility.ParseQueryString


  2. 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.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search