106 votes

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.

Merci,

110voto

Franci Penov Points 45358

Un 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 l' IsWellFormedUriString de la documentation.

Un faux résultat de cette méthode n'implique pas que l' 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ée TryCreate qui tentera exactement ce que vous voulez et renvoie true ou false (et le réel Uri exemple si la valeur est true).

69voto

DiscDev Points 8087

Puisque la réponse acceptée ne fournit pas d’exemple explicite, voici un code pour valider les URI en C #:

 Uri outUri;

if (Uri.TryCreate("ThisIsAnInvalidAbsoluteURI", UriKind.Absolute, out outUri)
   && (outUri.Scheme == Uri.UriSchemeHttp || outUri.Scheme == Uri.UriSchemeHttps))
{
    //Do something with your validated Absolute URI...
}
 

0voto

Vijay Sirigiri Points 2695

Dans votre cas, l'argument uri est un chemin absolu qui fait référence à un emplacement de fichier. Par conséquent, selon le document de la méthode, il retourne la valeur false. Se référer à cette

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X