Home > OS >  C# API HTTP Dynamic Parameters
C# API HTTP Dynamic Parameters

Time:11-09

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.

HttpUtility.ParseQueryString

  • Related