我有一个像这样定义的HyperLink:
<asp:HyperLink ID="hltest" runat="server"></asp:HyperLink>
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我这样做:
hltest.NavigateUrl = "www.google.com"
Run Code Online (Sandbox Code Playgroud)
但是,实际链接如下所示:
http://localhost:53305/www.google.com
Run Code Online (Sandbox Code Playgroud)
我可以附加http://到URL,但这不是首选方法,因为此URL可由用户维护.如果用户保存了URL,http://www.google.com则URL最终会显示为http://http://www.google.com.我知道我可以http://从URL中删除然后将其添加回来以确保它不会显示两次,但这是我想避免编写的额外代码/帮助方法.
编辑:这是我试图避免写的代码类型:
hltest.NavigateUrl = "http://" & "hTTp://www.google.com".ToLower().Replace("http://", String.Empty)
Run Code Online (Sandbox Code Playgroud)
更新 我知道我特意询问如何在不将协议附加到URL的情况下执行此操作,但看起来没有其他方法可以执行此操作.选定的答案带我到这个解决方案:
Function GetExternalUrl(Url As String) As String
Return If(New Uri(Url, UriKind.RelativeOrAbsolute).IsAbsoluteUri, Url, "http://" & Url)
End Function
Run Code Online (Sandbox Code Playgroud)
这很好,因为如果用户只输入www.google.com,它将附加http://到URL.如果用户提供协议(http,https,ftp等),它将保留它.
使用Uri该类并相应地处理它:
Uri uri = new Uri( userProvidedUri, UriKind.RelativeOrAbsolute );
if( !uri.IsAbsolute ) hltest.NavigateUrl = "http://" + userProvidedUri;
else hltest.NavigateUrl = userProvidedUri;
Run Code Online (Sandbox Code Playgroud)