想必大家都 ResolveUrl和ResolveClientUrl的用途吧。这里就是不介绍这些,如没有使用过请点击这里。
在MSDN中,.NET Framework 4和.NET Framework 3.5下的ResolveUrl和ResolveClientUrl的相同,但是真的相同吗?
答案当然是不相同,如果相同也就没有这篇随笔了。
以下代码:
代码
private
void
TestUrl()
{
relativeUrl = @" ~\11\22.aspx " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ~/11/22.aspx " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ~\11\22.aspx?1=1 " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ~\11\22.aspx?id=http://contoso.com " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ~/11/22.aspx?id=http://contoso.com " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ..\..\11\22.aspx? " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ..\..\..\11\22.aspx? " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" http://www.cnblogs.com/../11/22.aspx? " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" http://contoso.com " ;
ParseUrlResult(relativeUrl);
}
private void ParseUrlResult( string relativeUrl)
{
Response.Write( string .Format( " Raw url:{0} " , relativeUrl));
Response.Write( " <br/> " );
try
{
Response.Write( string .Format( " ResolveUrl:{0} " , this .ResolveUrl(relativeUrl)));
}
catch (Exception ex)
{
Response.Write( string .Format( " <font color='red'>ResolveUrl:{0}</font> " , ex.Message));
}
Response.Write( " <br/> " );
try
{
Response.Write( string .Format( " ResolveClientUrl:{0} " , this .ResolveClientUrl(relativeUrl)));
}
catch (Exception ex)
{
Response.Write( string .Format( " <font color='red'>ResolveClientUrl:{0}</font> " , ex.Message));
}
Response.Write( " <br/> " );
Response.Write( " <br/> " );
}
{
relativeUrl = @" ~\11\22.aspx " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ~/11/22.aspx " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ~\11\22.aspx?1=1 " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ~\11\22.aspx?id=http://contoso.com " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ~/11/22.aspx?id=http://contoso.com " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ..\..\11\22.aspx? " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" ..\..\..\11\22.aspx? " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" http://www.cnblogs.com/../11/22.aspx? " ;
ParseUrlResult(relativeUrl);
relativeUrl = @" http://contoso.com " ;
ParseUrlResult(relativeUrl);
}
private void ParseUrlResult( string relativeUrl)
{
Response.Write( string .Format( " Raw url:{0} " , relativeUrl));
Response.Write( " <br/> " );
try
{
Response.Write( string .Format( " ResolveUrl:{0} " , this .ResolveUrl(relativeUrl)));
}
catch (Exception ex)
{
Response.Write( string .Format( " <font color='red'>ResolveUrl:{0}</font> " , ex.Message));
}
Response.Write( " <br/> " );
try
{
Response.Write( string .Format( " ResolveClientUrl:{0} " , this .ResolveClientUrl(relativeUrl)));
}
catch (Exception ex)
{
Response.Write( string .Format( " <font color='red'>ResolveClientUrl:{0}</font> " , ex.Message));
}
Response.Write( " <br/> " );
Response.Write( " <br/> " );
}
以下是.NET Framework 4 下的结果: 以下是.NET Framework 3.5 下的结果:
在对比下,就发了不同。明显在.NET Framework 4下,ResolveClientUrl可以传入含绝对地址的参数了。ResolveUrl也可以传入含绝对地址的参数了,不过区分正反斜杠。
明显程序改了,但MSDN只多了个.NET Framework 4的字样,具体内容没改。