=有什么用?在链接?

时间:2012-07-25 08:51:26

标签: asp.net css linq

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

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

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

2 个答案:

答案 0 :(得分:3)

<强>更新

根据您的所有评论,答案是:查询字符串参数名称(键)实际上是"Home?",而不仅仅是"Home"。详细信息(包括产生技术上不正确的代码的原因)如下。

  

如果它有Home?=?

,它仍然会重定向

因为没有理由不应该重定向。当然,URL是无效的(?是保留字符,它在查询字符串中看不到未编码,因此URL中的第二个?不正确),但浏览器非常满足于处理无效的URL

另外,除非Username已经过网址编码,否则网址可能会有其他错误,具体取决于Username的内容。 (所有查询字符串参数必须是URL编码的,在.Net中,您使用HttpUtility.UrlEncode执行此操作。)

重新评论:

  

我的意思是我不知道他为什么使用Home?=以及它的用途

它没用,这是一个错误。 可能只是意味着 (不,显然不是,在下一次评论后见下文)

String url = "LogIn.aspx?Home=" + Username;

......更正确的是:

String url = "LogIn.aspx?Home=" + HttpUtility.UrlEncode(Username);

(从技术上讲,您必须对密钥和值["Home"Username]进行网址编码,但"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);

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

请注意,大多数浏览器可能会让您在指定字符串时使用该字符串。它是不正确的,但在某种程度上浏览器可能允许。

答案 1 :(得分:0)

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