将当前页面url作为url中的参数传递

时间:2012-04-18 04:35:50

标签: c# asp.net url

我有一个转发器.Insidea转发器有一个按钮。在项目命令我试试

protected void rptPost_ItemCommand(object source, RepeaterCommandEventArgs e)
{
 int contentID = Int32.Parse(e.CommandArgument.ToString());//Its return 1
 string host = HttpContext.Current.Request.Url.ToString();//its return http://localhost:1377/Forum.aspx
 //string URL = "~/Modules/Forum/PostDetails.aspx?ID=" + contentID +"&BackUrl=" + host;//Need help hear its not work
 string URL = "~/Modules/Forum/PostDetails.aspx?ID="  + contentID ;//Its work
 Response.Redirect(URL); 

}

当我只尝试传递ID时,如果我尝试传递多重网址,则其中一个是ID,接下来是Current Page Url则无法找到页面。并且{{1}我无法理解这个问题。作为参数传递page not found error不是支持,或者我错过了一些东西。谢谢。

1 个答案:

答案 0 :(得分:6)

以下是解决方案:

host = HttpUtility.UrlEncode(host)

这就是它起作用的原因:

您将主机URL作为GET参数传递。 GET参数是重定向的GET URI的一部分。 URI syntax包含具有特殊含义的字符,特别是您使用冒号(:)和斜杠(/),它们在URI字符串中具有特殊含义。几乎在所有情况下,不应将特殊字符用作GET参数数据值的一部分。

对于像你这样的情况,需要包含特殊字符,UrlEncoding已经开发出来。 UrlEncoding或Percent-encoding使用百分号编码的值替换URI中的特殊字符。作为URI查询处理的一部分,这些转义序列会自动转换回原始特殊字符。 HttpUtility类提供UrlEncode方法作为转义输入字符串中所有特殊字符的便捷方法。

请注意,对通过GET参数传递的所有数据进行URL编码是个好主意,除非您完全控制传递的数据,并且可以保证不需要编码。这可能是一个安全问题,因为如果您将用户输入传递给GET参数而没有先对其进行编码,攻击者可以包含新参数并以其他方式操纵您的URI。