如何从urlstring中删除端口号
我有以下代码片段:
string tmp = String.Format("<SCRIPT FOR='window' EVENT='onload' LANGUAGE='JavaScript'>javascript:window.open('{0}');</SCRIPT>", url); ClientScript.RegisterClientScriptBlock(this.GetType(), "NewWindow", tmp);
由此代码生成的URL包括端口号,我认为这是因为端口80是由网站使用,并在此代码中,我试图从网站的虚拟目录加载页面。 任何想法如何抑制这个代码生成的URLstring中的端口号?
使用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 );
编辑:我find了一个更好的方法:
var clean = uri.GetComponents( UriComponents.AbsoluteUri & ~UriComponents.Port, UriFormat.UriEscaped );
UriComponents.AbsoluteUri
保留所有组件,所以& ~UriComponents.Port
将只排除该端口。
UriBuilder u1 = new UriBuilder( "http://www.example.com:80/dir/?query=test" ); u1.Port = -1; string clean = u1.Uri.ToString();
在UriBuilder
上将Port
属性设置为-1
将删除任何显式端口,并隐式使用协议scheme的默认端口值。
基于Ian Flynn理念的更通用的解决scheme(适用于http,https,ftp …)。 此方法不会删除自定义端口(如果有的话)。 自定义端口是根据协议自动定义的。
var uriBuilder = new UriBuilder("http://www.google.fr/"); if (uriBuilder.Uri.IsDefaultPort) { uriBuilder.Port = -1; } return uriBuilder.ToString();
我会用这个System.Uri 。 我没有尝试,但它似乎是ToString会实际输出你想要的:
var url = new Uri("http://google.com:80/asd?qwe=asdff"); var cleanUrl = url.ToString();
如果没有,你可以结合url
-members的组件来创build你的cleanUrl
string。
var url = "http://google.com:80/asd?qwe=zxc#asd"; var regex = new Regex(@":\d+"); var cleanUrl = regex.Replace(url, "");
System.Uri
的解决scheme也是可能的,但会更臃肿。
你也可以使用URIBuilder 的属性来实现这一点,它具有你想要的方式输出url的属性
好的,谢谢我明白了…用KISS的原理…
string redirectstr = String.Format( "http://localhost/Gradebook/AcademicHonestyGrid.aspx?StudentID={0}&ClassSectionId={1}&uid={2}", studid, intSectionID, HttpUtility.UrlEncode(encrypter.Encrypt(uinfo.ToXml()))); Response.Redirect(redirectstr );
对于我正在做的是一个testing工具,工作正常
- Windows更新后“名称空间”System.Web.Mvc“中不存在types或名称空间名称”Html“
- ASP.NET自定义404返回200确定,而不是找不到404
- 如何将您的ASP.NET应用程序部署到活服务器?
- 在cookie中存储密码是否安全?
- System.MissingMethodException:找不到方法?
- Windows Azure PaaS(networkingangular色)的真正替代品?
- 如何解决“ConnectionString属性尚未初始化”
- CryptographicException:填充无效,无法删除,viewstate MACvalidation失败
- 正则expression式的格式为MMddyy的asp:RegularExpressionValidator(闰年问题)