我看到我的朋友在做一些 Web 开发,他的代码之一引起了我的注意,即 Response.Redirect。
有什么用Home?=
,不是LogIn.aspx
页面的名称吗?如果有,它仍然会重定向Home?=
。有人可以回答我的这个问题,并解释得很好。
String url = "LogIn.aspx?Home?=" + Username;
Response.Redirect(url);
更新
根据您的所有评论,答案是:查询字符串参数名称(键)实际上是"Home?"
,而不仅仅是"Home"
。详细信息(包括生成技术上不正确的代码的原因)如下。
如果它有 Home,它怎么还在重定向?=?
因为没有理由它不应该重定向。假设 URL 无效(?
是一个保留字符,它不能在查询字符串中出现未编码,因此?
URL 中的第二个是不正确的),但是浏览器很适合处理无效 URL。
另外,除非Username
已经进行了 URL 编码,否则 URL 可能有其他错误,具体取决于Username
. (所有查询字符串参数都必须是 URL 编码的,在 .Net 中您可以使用HttpUtility.UrlEncode
.)
回复您的评论:
我的意思是我不知道他为什么使用 Home?= 它有什么用
它没有用,这是一个错误。他可能只是意味着 (不,显然不是,请在您的下一条评论后见下文)
String url = "LogIn.aspx?Home=" + Username;
...更正确的是:
String url = "LogIn.aspx?Home=" + HttpUtility.UrlEncode(Username);
(从技术上讲,您必须对键和值 [both "Home"
and Username
] 都进行 URL 编码,但是 URL 编码的形式"Home"
是"Home"
,因此我们可以在不调用键的情况下逃脱。如果键需要任何其中的 URL 保留字符。)
重新评论您完全包含此代码的进一步评论:
string retrieveValue; protected void Page_Load(object sender, EventArgs e) { this.lblUsername.Text = Request.QueryString["Home?"; retrieveValue = this.lblUsername.Text; }
假设上面的语法错误是固定的(]
第 3 行缺失),看起来他实际上是"Home?"
在用作键(参数名称)。这意味着重定向应该是:
String url = "LogIn.aspx?" + HttpUtility.UrlEncode("Home?") + "=" + HttpUtility.UrlEncode(Username);
...因为密钥中有一个保留字符(?
)。因为这将在收到时为您解码,所以上面的代码应该可以工作。
请注意,大多数浏览器可能会让您摆脱他指定的字符串。这是不正确的,但在某种程度上浏览器可能允许。
不管 TJ 涵盖了哪些错误,他的意图是加载页面 LogIn.aspx,并将变量“Home”设置为访问者用户名。这允许页面“获取”变量并使用它。它基本上是一种将数据从一个页面发送到另一个页面的方式。