ASP.NET开发横幅实现指南

在软件开发过程中,迭代开发和频繁发布是一种非常动态的过程。技术的特性使得可以即时获取反馈,这对于改进产品至关重要。在进行用户接受测试(UAT)时,向用户展示当前构建是调试版本是非常有帮助的,原因有很多:

如果在这个横幅中显示版本号,用户在提交反馈时可以轻松引用。

调试版本的性能通常比发布版本的性能差,横幅可以解释这一点。

用户可能会不小心将测试站点误认为是实时站点,或者反之(这种情况经常发生!),横幅可以使这一点变得明显。

本文将解释并提供完整的代码,用于实现一个插件,该插件将向任何ASPX页面渲染这样一个“开发横幅”。

唯一要求是在Web.config文件中添加适当的配置,并确保横幅程序集在网站的bin目录中。

示例横幅作为页面角落的浮动图像添加,以免干扰页面布局。图像、ALT文本和JavaScript都存储在最终程序集中的嵌入式资源中,使这成为一个完全独立且模块化的工具。

需要基本的ASP.NET知识,对HTTP管道有一个基本的理解会很有帮助,但不是必需的。实际上,如果想直接使用示例,可以下载完成的程序集,并跳转到下面的“配置”部分!

浮动图像

要放置在Web页面上的横幅图像是一个部分透明的PNG,被一个绝对定位的DIV包围,该DIV与页面的右上角对齐。使用JavaScript将所需的HTML放置在页面上,而不是直接将HTML插入到超文本流中。

<div style="position: absolute; top: 0; right: 0; background: transparent; filter: Alpha(Opacity=60); -moz-opacity:.60; opacity:.60;"> <img src="{0}" alt="development build: version {1}" /> </div>

字符串格式化用于将横幅图像的URL和备用文本插入到HTML字符串中。

JavaScript

获取执行程序集的版本号,以便在横幅的备用文本中使用。

var version = page.GetType().BaseType.Assembly.GetName().Version; var szHtml = string.Format(BuildConfigurationBannerResources.BannerHtml, page.ClientScript.GetWebResourceUrl(GetType(), "Common.Web.Resources.BannerImage.png"), version); page.ClientScript.RegisterStartupScript(GetType(), "DevelopmentBanner", string.Format("Event.observe(window, 'load', function() {{new Insertion.Bottom($(document.body), '{0}');}});", szHtml), true);

注册一个JavaScript,该JavaScript将在页面加载后将HTML插入到DOM中。

HTTP管道:即时操作ASP

ASP.NET中的HTTP管道是一个执行序列,用于在处理HTTP请求时确定执行顺序。简单来说,HTTP模块是IHttpModule接口的实现,通过Web.config配置,可以轻松地将功能添加到这个管道中。

将使用一个HTTP模块在所有由运行时服务的ASP.NET页面上注册自定义JavaScript。

感兴趣的管道事件是PreRequestHandlerExecute,在其中将附加自定义JavaScript。可以直接操作HTML内容,但是没有必要引入解析HTML的复杂性,因为可以使用C# Page对象模型,它将负责HTML输出。

可以通过应用程序的Context Handler访问Page对象,这将是请求为ASPX页面时的Page实例(与AXD或其他运行时映射的URL类型不同)。

IHttpHandler handler = application.Context.Handler; if (handler is Page) { Page page = handler as Page; if (IsAssemblyDebugBuild(page)) { // ... } }

决定是否显示或隐藏横幅

要确定Web应用程序程序集是否为调试构建,以下代码查找程序集上的DebuggableAttribute - 这是在调试构建期间由.NET编译器插入的。

private bool IsAssemblyDebugBuild(Page page) { foreach (Attribute att in page.GetType().BaseType.Assembly.GetCustomAttributes(false)) { if (att is System.Diagnostics.DebuggableAttribute) { return (att as System.Diagnostics.DebuggableAttribute).IsJITTrackingEnabled; } } return false; }

配置

要配置Web应用程序使用横幅,请确保横幅程序集在Web应用程序的bin目录中,并在Web.config文件中放置以下XML。

<httpModules> <add name="Banner" type="Common.Web.Modules.BuildConfigurationBannerModule, Common.Web" /> </httpModules>
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485