ASP.NET – IHttpModule.BeginRequest触发2X,Application_BeginR
发布时间:2020-12-16 03:50:03 所属栏目:asp.Net 来源:网络整理
导读:我正在运行VS 2008和.NET 3.5 SP1. 我想在我的ASP.NET应用程序中的HttpModule中实现命中跟踪.我想,很简单.但是,我的HttpModule的BeginRequest事件对每个页面命中都会触发两次.该网站现在非常简单……没有安全性,只需要一些数据库工作.应该每页登录一行.为什
我正在运行VS 2008和.NET 3.5 SP1.
我想在我的ASP.NET应用程序中的HttpModule中实现命中跟踪.我想,很简单.但是,我的HttpModule的BeginRequest事件对每个页面命中都会触发两次.该网站现在非常简单……没有安全性,只需要一些数据库工作.应该每页登录一行.为什么这个事件会发射两次? 此外,IHttpModule.BeginRequest实际上第一次运行时(从关闭的Web浏览器)触发第一页时触发的次数不同… …当我点击数据库为页面提供动态数据时,3次并且只有1次没有命中数据库的页面.无论我是否触摸数据库,它在第一个页面之后每次点击时会触发2次. 有趣的是,Application_BeginRequest(在Global.asax中)始终只触发一次. 这是代码: using System; using System.Data; using System.Data.Common; using System.Net; using System.Web; using BluHeron.BusinessLayer; using Microsoft.Practices.EnterpriseLibrary.Data.Sql; namespace BluHeron.HttpModules { public class SiteUsageModule : IHttpModule { public void Init(HttpApplication httpApp) { httpApp.BeginRequest += OnBeginRequest; } static void OnBeginRequest(object sender,EventArgs a) { UsageLogger.LogSiteUsage(((HttpApplication)sender).Context.Request); } public void Dispose() { } } public static class UsageLogger { public static void LogSiteUsage(HttpRequest r) { string ipAddress = GetHostAddress(Dns.GetHostAddresses(Dns.GetHostName())); string browserVersion = r.Browser.Type; string[] urlChunks = r.RawUrl.Split('/'); string page = urlChunks[urlChunks.GetLength(0)-1]; SqlDatabase db = new SqlDatabase(Common.GetConnectionString()); DbCommand cmd = db.GetStoredProcCommand("LogUsage"); db.AddInParameter(cmd,"IPAddress",SqlDbType.NVarChar,ipAddress); db.AddInParameter(cmd,"BrowserVersion",browserVersion); db.AddInParameter(cmd,"PageName",page); db.AddInParameter(cmd,"Notes",""); db.ExecuteNonQuery(cmd); } private static string GetHostAddress(IPAddress[] addresses) { foreach (IPAddress ip in addresses) { if (ip.ToString().Length <= 15) { return ip.ToString(); } } return ""; } } } 解决方法
这可能为答案为时已晚,但对其他人有用.我遇到了同样的问题.每个请求触发两次BeginRequest事件.我调试了代码并意识到实际资源请求的第一个触发器,但第二个是“favicon.ico”请求的结果.在BeginRequest事件开始时,对favicon.ico请求的简单检查消除了该方法的第二次执行.
public void Application_BeginRequest(object sender,EventArgs e) { HttpApplication app = (HttpApplication)sender; HttpContext ctx = app.Context; if (ctx.Request.Path == "/favicon.ico") { return; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- .net – ANTS Memory Profiler – 我应该关注哪个内存?
- asp.net – Server.Transfer vs. Context.RewritePath
- 如何缓存输出的action方法,返回图像到asp.net mvc中的视图?
- asp.net – 部署在Visual Studio中正常运行,无法使用MSDepl
- asp.net – 有没有办法禁用.NET浏览器检测?
- asp.net-mvc – 是否可以将大量数据从控制器传递到MVC3中的
- asp.net-mvc-3 – 在MVC中的Http Post之后渲染相同的视图
- Crystal报表对ASP.Net运行时数据源的更改
- asp.net-mvc – MVC 3 – Razor – 从模型打印值
- 多线程和异步编程示例和实践-踩过的坑
推荐文章
站长推荐
- asp.net – 如何防止asp:FormView作为表格呈现?
- asp.net – SignalR不能与.Net Core一起使用
- entity-framework – 数据读取器与指定的模型不兼
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ex
- asp.net – 如何使用app_GlobalResource或app_Lo
- 如何使用ASP.NET更改HTML页面元素的CSS类?
- 为什么工作线程使我的ASP.NET生成器在睡眠期间遇
- asp.net – Razor视图引擎intellisense无法正常工
- asp.net – NuGet:’X’已经有一个依赖定义为’
- 在viewstate(或其他想法)中的asp.net商店对象类
热点阅读