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

标签 c# asp.net url

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

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/

相关文章:

swift - 本地 Bundle.main 的 URL 总是返回 nil

node.js - 为什么 %20 附加到 URL 地址 localhost

c# - 来自后台 worker 的文本框文本?

c# - Windows 8 应用程序 XAML 中的持久导航栏

c# - MySql 传递参数给出不同的结果

.htaccess - 使用 .htaccess 将路径查询转换为 url 变量?

c# - 让 C# 垃圾收集列表而不是重用它是一种不好的形式吗?

c# - 在 null 时设置属性的默认值

asp.net - ASP.NET 的电子邮件地址验证

c# - 更改txt文件并保存的快速方法