域名后面的查询字符串

时间:2010-03-05 18:08:18

标签: http url uri

我正在尝试在URL的末尾添加一个查询字符串,用于超链接控件,如下所示

HyperLink testLink = new HyperLink();
testLink.NavigateUrl = "http://www.example.com" + "?siteId=asd343s32kj343dce";

但是当它在浏览器中呈现时,它显示为 http://www.example.com/?siteId=asd343s32kj343dce之后的/ {.com字符。

如果是testLink.NavigateUrl = "http://www.example.com/abc.aspx" + "?siteId=asd343s32kj343dce";

然后链接正确呈现为http://www.abcd.com/abc.aspx?siteId=asd343s32kj343dce(无额外字符)。

我错过了什么吗?请指教。

谢谢你, 克里希纳。

4 个答案:

答案 0 :(得分:5)

浏览器正在假设域名后面应该有斜杠,从而为您更正URL。对于不执行此操作的浏览器,您可能会遇到问题,因此您应该将URL更正为:

testLink.NavigateUrl = "http://www.abcd.com/" + "?siteId=asd343s32kj343dce";

斜杠应该在域名之后的原因是域名本身不能是资源。域名只是指定网站,URL必须具有指定该站点上的资源的东西,斜杠指定站点根文件夹中的默认页面。

答案 1 :(得分:3)

这是正常的, / 告诉您域名已结束,您现在位于网站结构内(本例中为根上下文)。

第二个是正常的,因为abc.aspx是一个网页,它可以接受查询字符串。域名不能接受查询字符串。

答案 2 :(得分:1)

An HTTP URL takes the form:

http://<host>:<port>/<path>?<searchpart>

where <host> and <port> are as described in Section 3.1. If :<port>
is omitted, the port defaults to 80.  No user name or password is
allowed.  <path> is an HTTP selector, and <searchpart> is a query
string. The <path> is optional, as is the <searchpart> and its
preceding "?". If neither <path> nor <searchpart> is present, the "/"
may also be omitted.

http://tools.ietf.org/html/rfc1738#section-3.3

答案 3 :(得分:0)

虽然http://example.com?query是有效的URI。 {URI}的normalization表示http://example.com?queryhttp://example.com/?query相等:

  

[...]因为“http”方案使用了一个权限组件,默认端口为“80”,并且定义了一个等同于“/”的空路径,以下四个URI是等价的:

  http://example.com
  http://example.com/
  http://example.com:/
  http://example.com:80/
     

通常,使用具有空路径的权限的通用语法的URI应规范化为“/".

的路径。