-2

我看到我的朋友在做一些 Web 开发,他的代码之一引起了我的注意,即 Response.Redirect。

有什么用Home?=,不是LogIn.aspx页面的名称吗?如果有,它仍然会重定向Home?=。有人可以回答我的这个问题,并解释得很好。

String url = "LogIn.aspx?Home?=" + Username;
Response.Redirect(url);
4

2 回答 2

3

更新

根据您的所有评论,答案是:查询字符串参数名称(键)实际上是"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);

...因为密钥中有一个保留字符(?)。因为这将在收到时为您解码,所以上面的代码应该可以工作。

请注意,大多数浏览器可能会让您摆脱他指定的字符串。这是不正确的,但在某种程度上浏览器可能允许。

于 2012-07-25T08:54:20.437 回答
0

不管 TJ 涵盖了哪些错误,他的意图是加载页面 LogIn.aspx,并将变量“Home”设置为访问者用户名。这允许页面“获取”变量并使用它。它基本上是一种将数据从一个页面发送到另一个页面的方式。

于 2012-07-25T09:02:47.773 回答