J'ai un contrôle sur l'une de mes page qui prend une entrée utilisateur (URL) et permet à l'utilisateur de tester le lien.
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("URL") %>' Target="_blank">Click here to test link</asp:HyperLink>
4 Réponses :
Essayez ceci ... EDIT: strong> Si vous souhaitez ajouter vérifier s'il contient déjà http: // code> puis Il devrait être comme .. p>
cela fonctionnerait-il? Et si l'entrée l'a déjà http dessus? Et si c'est un site sécurisé (HTTPS) ou un site FTP?
@Muhammed: +1 == True est inutile, non? @stickman ne vous attendez pas à voir un algorithme qui trouve le protocole d'une URL brute. c'est complètement inutile et impossible.
yah; vous avez raison. Je suppose que cela va l'aider à comprendre :)
@naveen: Je n'essaie pas de résoudre le protocole. Je souhaite que le serveur DNS résout le protocole, comme si je suis entré dans l'URL exacte dans un navigateur. Si je mets http: // devant une URL qui serait normalement résolue à HTTPS: // par le DNS, pourrait-il toujours résoudre à une adresse HTTPS?
@Muhammad: J'ai fini par utiliser votre solution, mais je l'ai fait vérifier .Contains (": //") comme Colebrand a dit. Ceci est juste au cas où ils se dérouleront dans l'adresse HTTPS, cela n'ira pas https ... de préférence je voudrais Envoyez simplement l'URL au navigateur et laissez le navigateur le gérer à ses propres termes, mais c'est la meilleure solution probablement la meilleure solution. Merci.
@stickman: J'ai écrit quelque chose comme une réponse. c'est simplement une explication. J'ai commencé comme un commentaire mais j'ai fini par écrire.
Dans votre code-derrière, vérifiez si l'entrée de l'utilisateur contient «http: //» et l'annexez si elle ne le fait pas. Vous pouvez également utiliser JavaScript pour le faire. p>
Et si c'est un site sécurisé (HTTPS) ou un site FTP?
Vous vérifiez à la fois HTTP et HTTPS.
En outre, "Prepend", pas "ajoute".
Basé sur vos commentaires: P>
Et si c'est un site sécurisé (https) ou un site FTP? p> blockQuote>
et p>
cela fonctionnerait-il? Et si l'entrée a déjà
http code> dans elle? Et si c'est un site sécurisé (HTTPS) ou un site FTP? P> blockQuote>et p>
Le problème est que si l'utilisateur met dans l'URL "Google.com", le lien sera traité comme "http: //localhost/google.com". Je dois mettre "http://www.google.com" pour aller au bon endroit. P>
est-il possible de traiter le lien comme celui-ci est un lien absolu dans tous les cas? p> blockQuote>
Vous demandez magie em>. Nous ne sommes pas spécialisés dans la magie ici. Vous devez spécifier quelque chose em> qui vous permet de savoir qu'il peut devenir un type de domaine spécifique. Dites-leur s'ils ne spécifient pas le protocole que vous allez comme http: // et le reste de l'heure à laquelle il s'agit de spécifier le protocole. C'est tout ce que vous pouvez faire. P>
En ce qui concerne la détermination s'il s'agit d'un protocole, cochez
string.Contains (": //") code>, car c'est ce que le navigateur va faire de toute façon, plus ou moins. P>
Pourquoi est-ce magie? Tout ce que je demande, c'est que, au lieu de mettre localhost à l'avant de tous les liens qui ne commencent pas avec http, entrez tout ce que Le lien L'utilisateur a spécifié dans la nouvelle fenêtre du navigateur et la laisser se résoudre.
Non, ce n'est pas ce que vous demandez. La spécification sur les URL de liaison est que si elles ne commencent pas avec un protocole, elles sont ajoutées au chemin actuel de la page comme exécution.
Je ne vois toujours pas pourquoi c'est magique. La magie implique qu'il y a un manque d'informations qui m'empêche de le faire. Mais il n'y a pas - cependant, l'utilisateur est entré sous forme d'URL, je souhaite qu'il explicite le même comportement que s'ils entraient cette URL dans un navigateur.
TORT. Vous avez tellement tort. Regardez, comment savez-vous s'il est http, https ou ftp basé sur ils vous ont donné "Google.com" ... Le protocole n'a rien à voir avec DNS. Comment pensez-vous que les protocoles fonctionnent? J'aime que tu as utilisé ma réponse mais que tu as accepté la réponse de quelqu'un d'autre. Vous n'êtes pas du tout sûr de ce que vous voulez faire, sauf que vous le souhaitez de savoir par magie comment utiliser le protocole. Je suis plus que disposé à en faire ceci à propos de l'éducation, mais votre guideur de porc ne permettra-t-il de le faire?
@Jcolebrand: facile là-bas, il n'y a pas besoin d'être si agressive. Comme je l'ai dit, j'essaie de reproduire exactement ce que fait le navigateur avec l'URL. Je ne sais pas comment il le fait, c'est peut-être que c'est le DNS ou peut-être que c'est le navigateur - ce que j'ai fait de faire certaines hypothèses sur le protocole, mais je ne sais toujours pas si c'est la même hypothèse que le navigateur utilise. Si c'était "magique", la frappe dans Firefox "Google.com" dans l'invite d'exécution me donnerait un 404.
@jcolebrand - J'ai sélectionné l'autre réponse parce qu'il a fourni le code actuel et j'ai senti qu'il était le plus utile. J'ai décidé de modifier son code avec votre suggestion, c'est pourquoi vous avez eu un uppote.
Le navigateur utilise «la magie», sous la forme d'elle essaie HTTP si aucun protocole n'est donné, et cela essaie .com, .org, .Net et quelques autres TLD avant d'abandonner, s'il est ainsi configuré, pour les choses comme "serveur" ou "exemple" ou "Microsoft". Je sais que c'est magique parce que vous ne savez pas comment cela le fait, mais vous savez qu'il est technologiquement avancé. C'est une vieille citation. Mais regardez, comment savez-vous que si quelqu'un vous dit de vérifier leur site Web à ThatWebSitedott, puis vous n'avez pas entendu le TLD et que vous ne pouvez plus leur demander à nouveau, comment le trouvez-vous? Vous devez le chercher. Et si vous obtenez seulement une chance?
Vous devez deviner si vous ne savez pas avec certitude. Ou vous demandez à quelqu'un. Dans ce cas, vous devez demander à l'utilisateur. Mon conseil, étant donné ce que vous avez dit, est de mettre un chèque sur le terrain car il est entré, et si la chaîne qu'elles fournies ne contiennent pas : // code> puis le rejeter et dites-leur Essayer à nouveau. Si vous ne faites pas cette chose, vous ne pouvez pas faire ce que vous voulez arriver. Je me fiche de combien vous voulez, ou à quel point vous êtes sûr que vous pouvez y arriver. Maintenant, je dirai que quelque chose comme 95% du temps qu'ils veulent http: // etc.com, mais ce sont des statistiques sur la personne moyenne. Ton appel.
Cette question est-elle de nature académique ou avez-vous un problème à résoudre? p>
Premièrement, la notion que http://www.google.com est le bon endroit et http: //localhost/google.com est incorrect est très faux. P>
votre problème comme je vois est-ce.
Lorsque vous tirez des URL à partir d'une source de données, il existe des URL brutes que ASP.NET Framework reconnaît l'URL relative. Mais vous voudriez qu'ils utilisent leur URI absolue. p>
Mais le problème n'est pas avec le cadre comme http: //localhost/google.com pourrait être un URL valide.
Un bon exemple pour la même chose sera le site intégré avec . Il a des URL valides comme http://builtwith.com/facebook.com p>
et ainsi, le problème est à l'endroit où vous avez saisi les données. Pourquoi ne pouvez-vous pas placer un petit combo afin que les utilisateurs puissent facilement ajouter les protocoles, puis ajouter l'URL comme indiqué ci-dessous? P>
p>
J'espère que cela aide. P>
Merci pour votre explication. Tout d'abord, oui c'est un problème que je dois résoudre. localhost / google.com est une URL valide, en fait, je suis sûr que tout est une URL valide, Cela dépend simplement de la manière dont le DNS le traite. Cependant, dans ce cas, l'utilisateur est invité à spécifier un lien. La plupart des utilisateurs vont supposer que c'est un lien absolu et non un relatif, ce qui les emmène à localhost / google.com a > ne serait pas ce qu'ils veulent. J'aime bien l'idée de la boîte déroulante, c'est peut-être une idée.
Cette hypothèse n'est pas valide - Je suis sûr que tout est une URL valide, cela dépend simplement de la manière dont le DNS traite code>
@ALEX: OH OK OK, pouvez-vous me montrer une URL invalide que le DNS ne serait pas capable de résoudre?
Google.com est une URL invalide. Vous pouvez aller à http://urlvalidator.com/ code> et vérifier.