我看到我的朋友做了一些Web开发,他的一个代码引起了我的注意,就是Response.Redirect。
Home?=
的用途是什么,不是LogIn.aspx
是页面的名称,如果它有Home?=
,它仍然会重定向。有人可以回答我的这个问题,并解释得很清楚。
String url = "LogIn.aspx?Home?=" + Username;
Response.Redirect(url);
答案 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”设置为访问者用户名。这允许页面“获取”变量并使用它。它基本上是一种将数据从一个页面发送到另一个页面的方式。