我有一个转发器.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
不是支持,或者我错过了一些东西。谢谢。
答案 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。