我有以下代码片段:
string tmp = String.Format("<SCRIPT FOR='window' EVENT='onload' LANGUAGE='JavaScript'>javascript:window.open('{0}');</SCRIPT>", url);
ClientScript.RegisterClientScriptBlock(this.GetType(), "NewWindow", tmp);
Run Code Online (Sandbox Code Playgroud)
此代码生成的URL包括端口号,我认为这是发生的,因为网站使用端口80,在此代码中我尝试从网站的虚拟目录加载页面.有关如何抑制此代码生成的URL字符串中的端口号的任何想法?
Dan*_*bić 125
使用该Uri.GetComponents
方法.要删除端口组件,您必须组合所有其他组件,例如:
var uri = new Uri( "http://www.example.com:80/dir/?query=test" );
var clean = uri.GetComponents( UriComponents.Scheme |
UriComponents.Host |
UriComponents.PathAndQuery,
UriFormat.UriEscaped );
Run Code Online (Sandbox Code Playgroud)
编辑:我找到了一个更好的方法:
var clean = uri.GetComponents( UriComponents.AbsoluteUri & ~UriComponents.Port,
UriFormat.UriEscaped );
Run Code Online (Sandbox Code Playgroud)
UriComponents.AbsoluteUri
保留所有组件,因此& ~UriComponents.Port
只会排除端口.
Ian*_*ynn 71
UriBuilder u1 = new UriBuilder( "http://www.example.com:80/dir/?query=test" );
u1.Port = -1;
string clean = u1.Uri.ToString();
Run Code Online (Sandbox Code Playgroud)
将该Port
属性设置为-1
on UriBuilder
将删除任何显式端口,并隐式使用协议方案的默认端口值.
lab*_*lbe 36
一个更通用的解决方案(适用于http,https,ftp ...)基于Ian Flynn的想法.此方法不会删除自定义端口(如果有).根据协议自动定义自定义端口.
var uriBuilder = new UriBuilder("http://www.google.fr/");
if (uriBuilder.Uri.IsDefaultPort)
{
uriBuilder.Port = -1;
}
return uriBuilder.Uri.AbsoluteUri;
Run Code Online (Sandbox Code Playgroud)
我会使用System.Uri.我没试过,但似乎ToString实际上会输出你想要的东西:
var url = new Uri("http://google.com:80/asd?qwe=asdff");
var cleanUrl = url.ToString();
Run Code Online (Sandbox Code Playgroud)
如果没有,您可以组合url
-members 的组件来创建cleanUrl
字符串.
var url = "http://google.com:80/asd?qwe=zxc#asd";
var regex = new Regex(@":\d+");
var cleanUrl = regex.Replace(url, "");
Run Code Online (Sandbox Code Playgroud)
的解决方案System.Uri
也是可能的,但会更加臃肿。
归档时间: |
|
查看次数: |
29695 次 |
最近记录: |