65.9K
CodeProject 正在变化。 阅读更多。
Home

BooProd.Core - 上下文敏感 URL

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.80/5 (3投票s)

2004年12月13日

7分钟阅读

viewsIcon

49233

downloadIcon

214

帮助您创建上下文敏感的动态 URL:动态计算的 URL,取决于页面在哪台服务器上生成。

引言

本文旨在帮助 .NET 开发者构建动态网站,尤其能 轻松构建 URL。您可以在这里找到一个简单的 XML 配置文件,用于定义您自己的网站定义,以及一些简单技巧,用于即时生成 上下文敏感 URL。此包可以为您节省大量构建和测试网站的时间。

什么是上下文敏感 URL?

当您在本地计算机上创建网站并且不想使用相对 URL 时,HTML 代码中的所有 URL 都显示为“http://locahost/MyApplication/Page.html”。当您尝试将网页发布到 Internet 时,会出现一个大问题。所有 URL 都指向您的本地网站,而不是您的生产网站,如“http://www.MyDomain.com/Page.html”。显然,您可以使用相对 URL,但在某些情况下,这是不可能的。解决方案是重命名页面中的所有 URL。我开玩笑的,这不是很聪明!事实上,您需要这些 URL 动态计算,具体取决于页面在哪台服务器上生成。这就是我所说的上下文敏感 URL 生成。

背景

使用此包无需任何背景知识。

安装

下载 ZIP 文件并将其解压到您的 'c:\temp' 文件夹。您必须创建这两个文件夹:

  • BooProd.Core.TestDynURL
  • Inetpub

首先,将 'c:\temp\Inetpub\wwwroot' 文件夹中的 'BooProd.Core.TestDynURL' 文件夹复制到您的 'c:\InetPub\wwwroot' 文件夹。然后在 IIS 中,创建一个新的 Web 应用程序,命名为 'BooProd.Core.TestDynURL',指向 'c:\InetPub\wwwroot\BooProd.Core.TestDynURL'。然后,双击 'c:\temp\BooProd.Core.TestDynURL\BooProd.Core.TestDynURL.sln' 文件。

该解决方案使用 VS.NET 2003 v7.1.3088 和 .NET Framework v1.1.4322 SP1 构建。

另请参阅

您可以参考我关于上下文敏感数据库访问的文章“BooProd.Core DBAccess”。

使用代码

本文旨在帮助您创建上下文敏感的动态 URL。首先,您需要配置您的网站定义并初始化该包以便使用。然后,我们将看到一些创建完整上下文敏感动态 URL 的具体用法,用于图像、表单和重定向。

本地与生产

此包基于的核心功能之一是检测执行上下文。我认为,在项目的生命周期中有两个主要阶段。第一个阶段是在本地计算机上创建项目。第二个阶段是将该项目从本地计算机部署到生产服务器。有时会有预生产服务器,但我们将将其视为生产服务器。本地版本和生产版本的文件的修改越少越好。此包的目的是在本地和生产版本之间实现零修改

为了使用上下文敏感信息,我们需要在执行时知道我们是在本地执行上下文还是在生产执行上下文中。我已将上下文检测基于执行应用程序的主机 IP 地址。当您在本地计算机上工作时,您通常位于私有网络中,您的计算机的 IP 地址例如是 10.1.1.5。假设您与团队中的另一位同事一起工作,他的主机 IP 地址配置为 10.1.1.10。您需要被同时视为在本地上下文中执行项目。因此,我将定义您和他之间的通用 IP 前缀是“10.1.1.”。所有以“10.1.1.”开头的 IP 地址将被视为在本地上下文中执行,而所有其他 IP 地址将被视为在生产环境中执行。例如,具有私有 IP 地址“10.2.2.1”或公共 IP 地址“209.171.52.99”的主机将被视为在生产环境中执行。

通过 XML 文件进行配置

首先要做的是用您自己的网站参数填充 XML config 文件。该文件的一个模板在 BooProd.Core 项目中,名为 ExeContextTemplate.xmlExeContext 代表 execution context(执行上下文)。

第一个 XML 节点是 ExeConfigversion 属性用于 XML 文件的版本控制,以备将来使用并检查兼容性。local_ip 属性允许确定所有被视为本地的 IP 地址的前缀。

下一个 XML 节点是 ExeDBList,描述了与您的数据库的上下文敏感连接。您可以参考我关于上下文敏感数据库访问的文章“BooProd.Core DBAccess”。

下一个 XML 节点是 ExeWebSiteList,描述了您所有的网站 URL。每个网站都由一个 ExeWebSite 节点详细说明。alias 属性是一个关键字(别名),在您的 HTML 或 C# 代码中需要获取该网站的上下文敏感 URL 时,每次都会使用它。url 属性是用于访问您的网站的 URL,它取决于本地或生产的执行上下文。您可以根据需要添加任意数量的 ExeWebSite 节点。

...
<ExeConfig>
 <version>1.2</version>
 <local_ip>10.1.</local_ip>
</ExeConfig>
...
<ExeWebSite>
 <alias>CODEPROJECT</alias>
 <local><url>https:///BooProd.Core.TestDynURL</url></local>
 <prod><url>http://www.code-project.com</url></prod>
</ExeWebSite>
...

动态与静态访问

动态访问

访问值的第一个方法是提供 XML config 文件中定义的别名字符串,如下所示:ExeContext.WebSite("CODEPROJECT").URL(这将返回 XML config 文件中定义的“CODEPROJECT”别名关联的网站 URL)。这很有效,但您可能会拼错别名,这可能难以调试。

静态访问

另一种方式更简洁、更安全。与 ExeContextTemplate.xml 一起提供的是一个 ExecTemplate.cs 类。这个类充当 XML config 文件中定义的值的直接快捷方式。这更安全,因为您可以在编译时检查所有别名是否有效,因此关联的信息也有效。这种方法的缺点是您必须编写一个小类,并且所有别名都必须映射到 XML config 文件。但是,访问信息将是最快的:ExecTemplate.WS_CODEPROJECT.URL(这将返回 XML config 文件中定义的“CODEPROJECT”别名关联的网站 URL,使用 ExecTemplate 类的 XS_CODPROJECT 属性)。

初始化

创建配置文件后,您必须在使用该包之前对其进行初始化。最好的方法是在 Global.asax 中进行。这允许您只为每个新会话配置一次执行上下文。

...
protected void Session_Start(Object sender, EventArgs e)
{
  ExecTemplate.autoInit(Session);
}
...

然后,在每个需要初始化执行上下文的 .aspx 页面上。这不是从头开始初始化,实际上我们使用了在 Global.asax 中创建并存储在会话变量中的引用。

...
private void Page_Load(object sender, System.EventArgs e)
{
    // Placer ici le code utilisateur pour initialiser la page

    ExecTemplate.refresh(Session);
}
...

现在,您就可以根据执行上下文动态生成 URL 了,而且完全透明。ZIP 文件中包含的 TestDynURL 项目将向您展示多种实现方法。将其解压到您的 InetPub 目录。然后您可以在您喜欢的浏览器中打开 MainForm.aspx 文件,查看结果。

UML 考量

不要担心 UML,它非常酷。您不必仔细阅读这一部分,关键内容已包含在演示项目中。

这是主要的 ExeContext 类以及直接访问类 ExecTemplate

关注点

  1. 首先,您可能不真正理解为什么需要这样处理 URL?我的感觉是,当您在一个团队中工作时,每个人都必须使用相同的开发规则。所以,这是一种实现方式。
  2. 此包将在本地和生产环境上自行执行,无需修改。这非常好。
  3. 此包是可扩展的,因为我只实现了一个有用的功能。随时可以添加您自己的上下文敏感工具。

历史

这是我的第二篇文章,但在我接下来的文章(希望很快发布)中,您将找到该功能的一些惊人应用,在开发生命周期中非常有用……

  • v1.1 - 2004/12/22
  • 已解释安装过程。

  • v1.0 - 2004/12/07
  • First version.

© . All rights reserved.