Comment faire pour supprimer efficacement une chaîne de requête par Clé à partir d'une Url?
Comment faire pour supprimer une chaîne de requête par Clé à partir d'une Url?
J'ai la méthode ci-dessous qui fonctionne très bien mais je me demandais est-il mieux/plus court chemin? ou construit .NET méthode qui peut le faire plus efficacement?
public static string RemoveQueryStringByKey(string url, string key)
{
var indexOfQuestionMark = url.IndexOf("?");
if (indexOfQuestionMark == -1)
{
return url;
}
var result = url.Substring(0, indexOfQuestionMark);
var queryStrings = url.Substring(indexOfQuestionMark + 1);
var queryStringParts = queryStrings.Split(new [] {'&'});
var isFirstAdded = false;
for (int index = 0; index <queryStringParts.Length; index++)
{
var keyValue = queryStringParts[index].Split(new char[] { '=' });
if (keyValue[0] == key)
{
continue;
}
if (!isFirstAdded)
{
result += "?";
isFirstAdded = true;
}
else
{
result += "&";
}
result += queryStringParts[index];
}
return result;
}
Par exemple je peux l'appeler comme:
Console.WriteLine(RemoveQueryStringByKey(@"http://www.domain.com/uk_pa/PostDetail.aspx?hello=hi&xpid=4578", "xpid"));
Espère que la question est claire.
Merci,
- double possible de l'URL de la chaîne de recherche - Rechercher, remplacer, ajouter, mettre à jour les valeurs?
- Étiquette: "réinventer la roue" [
System.Web.HttpUtility.ParseQueryString
] - aucun des deux n'a la solution complète ni des réponses à la question posée.
- Pourriez-vous nous donner un exemple d'entrée et de sortie?
- Bien sûr, écrit dans la réponse.
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne bien:
un exemple:
et retours:
Nous pouvons aussi le faire en utilisant les regex
https://regexr.com/3i9vj
parameterToRemove="ent"
un, vous vous retrouverez avecDefault.aspx?AgLanguage=2
). Si vous ne pas ont à prendre en charge le javascript, l'amendement suivant utilise positif-lookbehind pour contourner ce problème:(&{0}=[^&\s]+|(?<=\?){0}=[^&\s]+&?)
Cette classe d'assistance a également Définir des méthodes.
Comment à ce sujet:
J'ai trouvé un moyen sans l'aide de Regex:
J'ai essayer avec l'ajout d'un autre terrain à la fin, et il fonctionne très bien pour cela.
Il est utile de classe appelé UriBuilder dans l'espace de noms System. On peut l'utiliser avec un couple de méthodes d'extension pour effectuer les opérations suivantes:
Ou comme ceci:
Les méthodes d'extension:
Je pense que le plus court chemin (que je croire produit une URL valide dans tous les cas, en supposant que l'URL est valide pour commencer) serait d'utiliser cette regex (où
getRidOf
est le nom de la variable que vous tentez de supprimer) et le remplacement est une chaîne de longueur nulle""
):ou peut-être même
alors que peut-être pas l'absolu plus jolie Url, je pense elles sont toutes valides:
et c'est une simple regex pour remplacer:
...devrait aboutir à la chaîne:
...qui semble être valable pour un ASP.Net application, tandis que les
replace
ne l'égalité destrue
(pastrue&
ou quelque chose comme ça)Je vais essayer de l'adapter si vous avez un cas où ça ne marchera pas 🙂
Code ci-dessous avant de supprimer votre
QueryString
.Désolé c'est un peu sale, mais devrait fonctionner dans les vieux cadre
Voici ma solution:
Je v il ajouté un peu plus de validation de la saisie.
Quelques exemples de tests unitaires:
Voici une solution complète qui fonctionne avec >= 0 params spécifié, et de toute forme d'URL: