J'ai une chaîne en .NET qui est en fait une URL. Je veux un moyen simple d'obtenir la valeur d'un paramètre particulier.
Normalement, j'utiliserais simplement Request.Params["theThingIWant"]
, mais cette chaîne ne provient pas de la demande. Je peux créer un nouvel Uri
article comme ceci:
Uri myUri = new Uri(TheStringUrlIWantMyValueFrom);
Je peux utiliser myUri.Query
pour obtenir la chaîne de requête ... mais ensuite, je dois apparemment trouver un moyen regexy de le diviser.
Suis-je en train de manquer quelque chose d'évident, ou n'y a-t-il pas de moyen intégré pour faire cela à court de créer une expression régulière d'une sorte, etc.?
HttpUtility.ParseQueryString(myUri.Query).Get(0)
et il extraira le premier paramètre. `HttpUtility.ParseQueryString(string)
! Comme son nom l'indique, il s'agit d'analyser les chaînes de requête, pas les URL avec des paramètres de requête. Si vous voulez le faire, vous devez d'abord le diviser?
comme ceci:Url.Split('?')
et obtenir le dernier élément en utilisant (selon la situation et ce dont vous avez besoin)[0]
ou LINQLast()
/LastOrDefault()
.C'est probablement ce que tu veux
la source
Voici une autre alternative si, pour une raison quelconque, vous ne pouvez pas ou ne voulez pas utiliser
HttpUtility.ParseQueryString()
.Ceci est construit pour être quelque peu tolérant aux chaînes de requête "mal formées", c'est-à-dire qu'il
http://test/test.html?empty=
devient un paramètre avec une valeur vide. L'appelant peut vérifier les paramètres si nécessaire.Tester
la source
@Andrew et @CZFox
J'ai eu le même bug et j'ai trouvé la cause du fait que le paramètre un est en fait:
http://www.example.com?param1
et nonparam1
ce à quoi on pourrait s'attendre.En supprimant tous les caractères avant et en incluant le point d'interrogation, ce problème est résolu. Donc, en substance, la
HttpUtility.ParseQueryString
fonction ne nécessite qu'un paramètre de chaîne de requête valide contenant uniquement des caractères après le point d'interrogation, comme dans:Ma solution:
la source
ParseQueryString
analyse les chaînes de requête.Il semble que vous devriez parcourir les valeurs de
myUri.Query
et les analyser à partir de là.Je n'utiliserais pas ce code sans le tester sur un tas d'URL malformées cependant. Cela pourrait casser certains / tous ces éléments:
hello.html?
hello.html?valuelesskey
hello.html?key=value=hi
hello.html?hi=value?&b=c
la source
Vous pouvez également utiliser la solution de contournement suivante pour qu'il fonctionne avec le premier paramètre:
la source
Utilisez .NET Reflector pour afficher la
FillFromString
méthode deSystem.Web.HttpValueCollection
. Cela vous donne le code qu'ASP.NET utilise pour remplir laRequest.QueryString
collection.la source
Ou si vous ne connaissez pas l'URL (afin d'éviter le codage en dur, utilisez le
AbsoluteUri
Exemple ...
la source
si vous voulez obtenir votre chaîne de requête sur la page par défaut. La page par défaut signifie l'url de votre page actuelle. vous pouvez essayer ce code:
la source
C'est en fait très simple, et cela a fonctionné pour moi :)
la source
Pour tous ceux qui souhaitent parcourir toutes les chaînes de requête d'une chaîne
la source
la source
Je l'ai utilisé et il fonctionne parfaitement
la source