Comment vérifier qu'une chaîne uri est valide
Comment vérifiez-vous que l'uri de la chaîne est valide (que vous pouvez nourrir à l'Uri constructeur)?
Jusqu'à présent je n'ai que le suivant, mais pour des raisons évidentes, je préfère un moins brute façon:
Boolean IsValidUri(String uri)
{
try
{
new Uri(uri);
return true;
}
catch
{
return false;
}
}
J'ai essayé d'Uri.IsWellFormedUriString mais il ne semble pas comme tout ce que vous pouvez jeter à l'constructeur. Par exemple:
String test = @"C:\File.txt";
Console.WriteLine("Uri.IsWellFormedUriString says: {0}", Uri.IsWellFormedUriString(test, UriKind.RelativeOrAbsolute));
Console.WriteLine("IsValidUri says: {0}", IsValidUri(test));
La sortie sera:
Uri.IsWellFormedUriString says: False
IsValidUri says: True
Mise À Jour/Répondre
L'Uri constructeur utilise genre Absolue par défaut. C'était à l'origine un écart lorsque j'ai essayé d'utiliser l'Uri.TryCreate et le constructeur. Vous n'obtenez pas les résultats escomptés, si vous faites correspondre le UriKind pour le constructeur et TryCreate.
- Bonne fonction que vous avez fait! +1
- N'ajoutez pas une réponse comme une modification à la question. Si on ajoute quelque chose à la les réponses existantes, l'ajouter comme une réponse distincte. Merci de modifier la réponse de votre question.
- double possible de Comment faire pour vérifier si une chaîne est une URL?
- Un double d'une question posée 9 mois après celui-ci? Fait sens total.
- Duplicata peut signifier 2 choses: 1/. Un manque de recherche de l'op. C'est clairement pas le cas ici! Vous question est bien écrit.
- 2/. Ou il pourrait être à la tête des nouvelles de l'utilisateur sur le droit chemin vers une meilleure réponse. Ce n'est pas l'âge, même pas sur la question. Le double pourrait être une faible qualité. Ps: j'ai pas de juger de la qualité de réponse ni la question ici.
Vous devez vous connecter pour publier un commentaire.
Bien formée URI implique le respect de certaines normes Rfc. Le chemin d'accès local dans votre exemple n'est pas conforme à ces. Lire la suite dans le
IsWellFormedUriString
de la documentation.Un faux résultat de cette méthode n'implique pas que le
Uri
classe ne sera pas en mesure d'analyser l'entrée. Alors que l'URI d'entrée peut ne pas être conforme à la RFC, il peut encore être une URI valide.Mise à jour: Et pour répondre à votre question - que l'Uri de documentation de la montre, il y a une méthode statique appelé
TryCreate
qui tentera exactement ce que vous voulez et renvoie true ou false (et le réelUri
exemple si la valeur est true).TryCreate
et laUri
constructeur doivent être identiques - essayez de passer leUriKind
comme vous l'avez fait pourTryCreate
.Uri.IsWellFormedUriString("http://dasda", UriKind.Absolute)
retourtrue
.http//dasda
est un URI absolu qui fait référence à un hôte nommédasda
sur le réseau local.Depuis que l'on a accepté la réponse n'est pas de fournir un exemple explicite, voici un code pour valider les Uri en C#:
En supposant que nous ne voulons soutenir URI absolu et requêtes HTTP, voici une fonction qui fait ce que vous voulez:
tmp
. La première étape est sans doute redondant dans ce cas...Dans votre cas, l'uri argument est un chemin absolu qui fait référence à un emplacement de fichier, de sorte que par le doc de la méthode, elle retourne false. Reportez-vous à cette