Tableau passe en ASP.NET de Base de l'Itinéraire de la Chaîne de Requête
Je veux faire cette, mais je veux aussi être capable de passer dans des tableaux dans la chaîne de requête. J'ai essayé des choses comme:
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
Et mon parcours dans le C# code ressemble à ceci:
[Route("route")]
[HttpGet]
public void DoSomething(string[] values)
{
//...
}
Mais dans tous ces cas, les valeurs est toujours nulle quand arrive le code C#. De quoi ai-je besoin de ma chaîne de requête à transmettre un tableau de chaînes de caractères?
- ne pense pas que ce soit possible
- Votre nom de paramètre ne correspond pas. Changement arr ou de valeurs.
Vous devez vous connecter pour publier un commentaire.
Chaîne délimitée n'est pas la norme. Pensez également à ce que le client si vous soutien swagger ou d'autres générateurs.
Pour ceux qui s'interrogent sur .net de base 2.1 bug qui reçoit une liste vide, le travail autour de est ici: https://github.com/aspnet/Mvc/issues/7712#issuecomment-397003420
Il a besoin d'un nom de paramètre sur FromQuery
[FromQuery]
attribut?Utiliser un nom de paramètre dans la chaîne de requête. Si vous avez une action:
Ensuite utiliser
values
dans la chaîne de requête pour passer un tableau à un serveur:Foo(string value)
?Unexpected end of Stream, the content may have already been read by another component
string
au lieu destring[]
il est très bienQue j'avais à faire quelque chose de semblable à cela, mais au lieu de chaînes, j'ai utilisé une liste de longtemps pour passer d'une pièce d'identité pour une recherche. À l'aide d'une fonction de sélection multiple, les valeurs choisies sont envoyés à la méthode (via get) comme ceci:
J'utilise aussi
Route("[controller]")
avant la déclaration de classe. Fonctionne très bien, mais la liste des éléments est cassé en plusieurs paramètres dans l'url, comme indiqué ci-dessous.J'ai trouvé deux problèmes dans votre question:
arr
pendant que vous Contrller l'Action duvalues
.ModelBinder
peut fonctionner comme prévu. Comme ceci:Après avoir fait cela, tout devrait fonctionner comme prévu.
J'ai trouvé une solution. Par exemple, si vous avez une requête de ce http://www.sitename.com/route?arr%5B%5D=ce&arr%5B%5D=qui.
Vous devez définir dans l'action de la prochaine code [FromQuery(Name = "arr[]")]. Nom de paramètre doit être entre crochets "arr[]". Comme résultat, nous pouvons voir:
public void DoSomething([FromQuery(Name = "arr[]")] string[] arr)
Donné:
La suite de demande de travail:
En fin de compte, j'ai juste passé dans une seule chaîne délimitée, puis l'utilisation de la chaîne.Split distincts sur le côté serveur. Pas la plus belle solution, mais il fonctionne. Jusqu'à ce que quelqu'un arrive avec une meilleure réponse, c'est tout ce que j'ai. Je le répète, je suis en utilisant .NET de Base, et ces chaînes de requête sont cadre spécifique.