Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pass Array into ASP.NET Core Route Query String

I want to do this, but I want to also be able to pass in arrays into the query string. I've tried things like:

http://www.sitename.com/route?arr[]=this&arr[]=that
http://www.sitename.com/route?arr[]=this&that
http://www.sitename.com/route?arr[0]=this&arr[1]=that
http://www.sitename.com/route?arr0=this&arr1=that
http://www.sitename.com/route?arr=this&arr=that

And my route in the C# code looks like this:

[Route("route")]
[HttpGet]
public void DoSomething(string[] values)
{
    // ...
}

But in all of these cases, values is always null when it gets to the C# code. What do I need my query string to be to pass an array of strings?

like image 670
user3685285 Avatar asked Apr 13 '17 16:04

user3685285


3 Answers

Use a parameter name in the query string. If you have an action:

public void DoSomething(string[] values)

Then use values in the query string to pass an array to a server:

?values=this&values=that
like image 122
Ilya Chumakov Avatar answered Oct 19 '22 08:10

Ilya Chumakov


Delimited string is not the standard. Think also about the client if you support swagger or other generators.

For those who wonder about .net core 2.1 bug which receives an empty list, the work around is here: https://github.com/aspnet/Mvc/issues/7712#issuecomment-397003420

It needs a name parameter on FromQuery

[FromQuery(Name = "employeeNumbers")] List<string> employeeNumbers
like image 41
Adel Tabareh Avatar answered Oct 19 '22 10:10

Adel Tabareh


I have found a solution. For example, if you have a query like this:

http://www.sitename.com/route?arr[]=this&arr[]=that

You must define in parameter as [FromQuery(Name = "arr[]")]. The name of parameter must include square brackets. As result we can see:

public void DoSomething([FromQuery(Name = "arr[]")] string[] arr)
like image 32
Alex Avatar answered Oct 19 '22 08:10

Alex