- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行 VS 2008 和 .NET 3.5 SP1。
我想在 HttpModule
中实现命中跟踪在我的 ASP.NET 应用程序中。很简单,我想。然而,BeginRequest
我的事件 HttpModule
每次点击页面都会触发两次。该站点现在非常简单......没有安全性,只是一些数据库工作。每页命中应记录一行。为什么这个事件会触发两次?
此外,IHttpModule.BeginRequest
第一次运行时(从关闭的 Web 浏览器),实际上为第一页命中触发了不同的次数......当我点击 DB 为页面提供动态数据时,只有 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", SqlDbType.NVarChar, browserVersion);
db.AddInParameter(cmd, "PageName", SqlDbType.NVarChar, page);
db.AddInParameter(cmd, "Notes", SqlDbType.NVarChar, "");
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; }
关于asp.net - IHttpModule.BeginRequest 触发 2X,Application_BeginRequest 触发 1X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181648/
在 HttpApplication 和 HttpContext 没有实现接口(interface)的情况下,如何在 asp.net 中对 HttpModule 进行单元测试? 最佳答案 过去在迁移到
IHttpModule的所有实现我看过以下内容: class HttpCompressionModule : IHttpModule { public void Init(HttpApplicat
public class NHibernateSessionPerRequest:IHttpModule { public void Dispose() { } public void
我创建的 IHttpModule 实现 public class ResponseTweaker : IHttpModule { // my module ... 在Web.config中注册
我正在用 C# 编写一个 HttpModule,并编写了一些单元测试来测试代码。 该模块非常简单,它所做的就是检查一些 cookie,并根据我们的业务逻辑使需要过期的 cookie 过期。 但我想确保
我的问题很简单(尽管答案很可能不是):我试图决定如何在 C#/ASP.NET 中实现服务器端上传处理程序。 我已经使用了 HttpModules(IHttpModule 接口(interface))和
我有一个自定义 IHttpModule 用于记录所有 HTTP 请求和响应,目前运行良好,但我很想扩展它,以便确定响应实际需要多长时间。 响应记录在 HttpApplication.EndReques
我目前有一个在存储库模式中使用 Fluent NHibernate (+ LINQ) 的 C# MVC 2 网络应用程序,我正在使用 Ninject 来处理 MVC Controller 的构造函数要
在我的程序中,我试图在 IHttpModule 中使用 session 变量。这是我的代码。这在 VS 2010 开发服务器中运行良好。但是当我尝试在 IIS7 中调试时,它显示异常 System.W
我有一个经典的 ASP 页面,我想使用 IHTTPModule 将其包装在一些日志记录中。 我的问题是,如果我的模块在执行页面之前访问任何表单变量,我的 ASP 页面会在访问第一个 Request.F
请看下面的代码 public class URLRewriter : IHttpModule { public void Dispose() { } public void I
HttpApplication 类和 IHttpModule 有什么区别?它们是相同还是不同? 我看到文章在两个类(class)中都提到了相同的事件。 最佳答案 HttpApplication 是在其
我正在编写 HttpModule 并需要对其进行测试,我正在使用 C#、.NET4.5.2、NUnit 和 起订量。 我尝试测试的方法是Context_BeginRequest: public cla
好吧,这很奇怪。我创建了一个简单的示例站点来演示该问题。在其中,我有一个 Default.aspx 页面,上面有一个按钮: 后面的代码只是在按钮点击时设置标签文本:
我正在编写一个新的 IHttpModule。我想使用 BeginRequest 事件处理程序使某些 404 请求无效。如何终止请求并返回 404? 最佳答案 您可以将状态代码显式设置为 404,例如:
我试图通过使用 ihttpmodule 将 js 注入(inject)页面(标签)。但是没有注入(inject) js。 我做了什么: 页面: Temp
更新:问题已解决。继续阅读。 知道为什么显然不能再添加自定义 IHttpModules 了吗? 我的问题是关于:HttpModule.Init - safely add HttpApplication
我创建了一个模块并以 iis7 集成模式托管它。 对于任何 aspx 和 html/php/任何扩展名的请求,BeginRequest 事件始终会被触发。 但是 Error 事件仅针对 aspx 扩展
我接到了一项令人兴奋的任务:重写我们的异常处理系统。虽然我要指出的是,从应用程序范围的角度处理异常不是我们想要的,但通常当我们的团队人手不足而无法完成我们需要推出的大量工作时,这是不可避免的,所以请不
我有一个用于 NHibernate session 管理的 HttpModule。 问题是当加载图片时,每个请求都会调用我的 HttpModule 并创建一个新的 ISession,这是一种愚蠢的做法
我是一名优秀的程序员,十分优秀!