Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 母版页编译和绝对URL_Asp.net_Dns_Master Pages - Fatal编程技术网

Asp.net 母版页编译和绝对URL

Asp.net 母版页编译和绝对URL,asp.net,dns,master-pages,Asp.net,Dns,Master Pages,于2009年4月3日更新 作为对一些评论的回应,母版页中的示例如下所示。这不是asp.net控件,这是硬编码的html <a href="http://www.MYDOMAIN.com/about_us.asp" accesskey="u"><span class="topleft"><span class="bottomleft">About us</span></span></a> 这将在生产服务器上呈现为 <

于2009年4月3日更新

作为对一些评论的回应,母版页中的示例如下所示。这不是asp.net控件,这是硬编码的html

<a href="http://www.MYDOMAIN.com/about_us.asp" accesskey="u"><span class="topleft"><span class="bottomleft">About us</span></span></a>

这将在生产服务器上呈现为

<a href="http://www.NEWDOMAIN.com/about_us.asp" accesskey="u"><span class="topleft"><span class="bottomleft">About us</span></span></a>

MYDOMAIN是我们主站点的真实域名,NEWDOMAIN是指向同一站点的完全有效的DNS条目

于2009年4月2日更新

所有URL都是以http://开头的绝对URL

我不认为这是浏览器的问题,因为实际呈现的源代码(通过查看源代码查看)已经更改。在IE7/8和Firefox3中都进行了检查,并见证了相同的行为

原始问题

我有一个ASP.NET2.0应用程序,它有几个母版页。这基本上是模拟的,看起来完全像我们的主网站,但因为它运行在不同的服务器上,所有菜单项等的URL都是我们的主网站的绝对URL

这在我的开发机器上运行得很好,但在生产服务器上,所有绝对URL在运行时都在更改,但单击时它们仍然位于相同的页面

这是DNS问题吗?当母版页和内容合并时,ASP.Net是否对URL进行DNS解析?如果是这样的话,为什么它对我的本地计算机没有相同的影响,它们在同一个域上。

我想“绝对”是指它们以“/”开头,而不是文件夹名

如果您使用的是ASP.NET控件,则这些控件将倾向于修改为从应用程序根目录开始

编辑以供评论

你能给我们举一个URL是如何改变的例子吗?i、 从somepage.aspx到trackingpage.aspx?someQueryString?或者域正在更改?还是别的什么

你说“他们仍然在同一页结束”-所以很明显,事情正在进行。您是否在生产服务器的web.config中注册了任何HttpHandler,这些HttpHandler可能会为您修改URL,以便它们都通过一些日志系统?也就是说,从服务器获取响应,处理生成的HTML,修改所有链接-是否使用简单的锚定标记以及超链接控件


您使用的自定义基本页是否在PreRender或Render中执行与更改URL的开发人员计算机在生产中不同的其他步骤?

不,这不是DNS问题,ASP.net不执行任何DNS解析。这是您在其中查看页面的浏览器的全部责任

但是,有几种情况会导致在页面标记中提供不一致的URL,客户端浏览器可能会对其进行不同的解释

浏览器总是以同样的方式解释以“http://”开头的URL——它是一个绝对URL,因此目标总是解析为相同的内容。确保主站点的所有URL都以“http://”开头

以“www.”(无http://)开头的URL将被视为相对URL-即,如果包含URL的页面位于,则您实际上是在请求。你会发现这几乎肯定不是你想要的行为

在当前域中,以斜杠(/)开头的URL将被视为绝对URL。例如,Google中的“/Tools”将导致对“”的请求。如果没有前导斜杠,浏览器会将URL视为相对于当前正在查看的页面(即,当您在“en”文件夹中查看页面时,“Tools”的URL将导致请求“en/Tools”)

我认为这就是您的问题所在。为了保持一致的行为,我发现确保所有URL都以斜杠开头是一个很好的经验法则。如果您想确保ASP代码生成的所有超链接都是正确的,请使用波浪线(ASP将替换为应用程序根文件夹的路径):



希望这能有所帮助。

这是一个非常完整的响应(+1),但所有这些URL都以http://开头,这是您可以得到的绝对值(或者我认为是这样)。但是在生产服务器上,这些URL正在更改。不,绝对值,我的意思是绝对值,“/”仍然是相对值。这些链接都以“http://”开头你能粘贴被更改的超链接的源代码吗?的确,你能给我们一个URL如何被更改的例子吗?谢谢大家,源代码按要求发布。
<asp:Hyperlink id="Test1" runat="server" NavigateUrl="~/Tools/Default.aspx">Tools</asp:Hyperlink>
<a href="<%= ResolveUrl("~/Tools/Default.aspx")%>">Tools</a>