我有一个中继器。在中继器内部有一个按钮。我尝试在项目命令上
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
它的工作,但如果我尝试传递 multipal url 一个是 ID
下一个是 Current Page Url
它无法找到页面。并给出 找不到页面错误
。我无法理解这个问题。不支持将 Url
作为参数传递,或者我遗漏了一些东西。谢谢。
最佳答案
解决方法如下:
host = HttpUtility.UrlEncode(host)
这就是它起作用的原因:
您将主机 URL 作为 GET 参数传递。 GET 参数是重定向的 GET URI 的一部分。 URI syntax包括具有特殊含义的字符,特别是您使用冒号 (:) 和斜线 (/),它们在 URI 字符串中具有特殊含义。在几乎所有情况下,不应将特殊字符用作 GET 参数数据值的一部分。
对于像您这样的情况,需要包含特殊字符,UrlEncoding发展了。 UrlEncoding 或百分比编码,将 URI 中的特殊字符替换为使用百分号编码的值。作为 URI 查询处理的一部分,这些转义序列会自动转换回原始特殊字符。 HttpUtility
类提供了 UrlEncode
方法,作为对输入字符串中所有特殊字符进行转义的便捷方式。
请注意,对您通过 GET 参数传递的所有数据进行 URL 编码是个好主意,除非您对传递的数据具有完全控制权并且可以保证编码不是必需的。这可能是一个安全问题,因为如果您将用户输入传递给 GET 参数而没有首先对它进行 URL 编码,攻击者可以包含新参数并以其他方式操纵您的 URI。
关于c# - 将当前页面 url 作为 url 中的参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202833/