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

本文关键字:url 参数传递 当前页 | 更新日期: 2023-09-27 18:31:31

我有一个中继器。在中继器内部有一个按钮。在项目命令我尝试

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它找不到页面。并给page not found error.我无法理解这个问题。不支持将Url作为参数传递,或者我错过了一些东西。谢谢。

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

这是解决方案:

host = HttpUtility.UrlEncode(host)

这就是它工作的原因:

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

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

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