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

Shr*_*ree 2 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); 

}
Run Code Online (Sandbox Code Playgroud)

当我只尝试传递ID它的工作,但如果我尝试传递multipal url一个是ID接下来是Current Page Url它无法找到page.And给page not found error.我无法理解问题.Url作为参数传递不支持或我错过了一些东西.谢谢.

Pau*_*ter 7

这是解决方案:

host = HttpUtility.UrlEncode(host)
Run Code Online (Sandbox Code Playgroud)

这就是为什么它的工作原理:

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

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

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