C# 创建泛型类型的HttpModule
我试图编写一个简单的IHTTP模块(在本例中)记录登录用户点击的每个页面。我正在尝试使它在多个Web应用程序中通用,以便它可以用于多种不同类型的用户对象 我有一个接口C# 创建泛型类型的HttpModule,c#,asp.net,asp.net-mvc-4,httpmodule,C#,Asp.net,Asp.net Mvc 4,Httpmodule,我试图编写一个简单的IHTTP模块(在本例中)记录登录用户点击的每个页面。我正在尝试使它在多个Web应用程序中通用,以便它可以用于多种不同类型的用户对象 我有一个接口ILogUser,它有一个属性: public interface ILogUser { public string LoggingRef { get;} } 我在从该界面继承的各种Web应用程序中有几个不同的用户对象: public class StaffMember : ILogUser { public int Id
ILogUser
,它有一个属性:
public interface ILogUser
{
public string LoggingRef { get;}
}
我在从该界面继承的各种Web应用程序中有几个不同的用户对象:
public class StaffMember : ILogUser
{
public int Id { get; set; }
public string Name { get; set; }
// many more properties
public string LoggingRef { get { return Name; }}
}
public class ExtranetUser : ILogUser
{
public int Id { get; set; }
public string Email { get; set; }
// many more properties
public string LoggingRef { get { return Email; }}
}
等等
我的HttpModule编码如下:
public class LogVisitModule<T> : IHttpModule where T : ILogUser
{
private readonly ILog log;
public LogVisitModule()
{
log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
}
public void Init(HttpApplication app)
{
app.PostAcquireRequestState += new EventHandler(this.PostAcquireRequestState);
}
private void PostAcquireRequestState(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpContext context = app.Context;
if (context.Session != null && context.Session["CurrentUser"] != null)
{
var user = (T)context.Session["CurrentUser"];
log.Info($"User {user.LoggingRef} has accessed {context.Request.FilePath}");
}
}
public void Dispose() { }
}
启动Web应用程序时,出现服务器错误:
无法加载类型“WebPortal.Modules.LogVisitModule”
描述:在执行过程中发生未处理的异常
当前的web请求。请查看堆栈跟踪以了解更多信息
有关错误的信息及其在代码中的来源
异常详细信息:System.Web.HttpException:无法加载类型
“WebPortal.Modules.LogVisitModule”
源错误:
在执行过程中生成了未处理的异常
当前web请求。关于货物来源和位置的信息
可以使用下面的异常堆栈跟踪来识别异常
任何帮助都将不胜感激!我希望我想做的有意义?我甚至不知道我所做的是否可能。我在谷歌上搜索了动态加载带有泛型类型的HttpModules,但还没有找到很多。是否可以只对
对象s进行操作?构造函数中的这一行让我感到很不舒服MethodBase.GetCurrentMethod().DeclaringType
,为什么不使用简单的GetType()
?@CSharpie-错误的复制和粘贴:)感谢您指出。出于好奇,如果您从LogVisitModule中删除泛型,它将按预期加载和运行?@Alex-是的,它在没有泛型的情况下运行得非常好。
public static void Start()
{
HttpApplication.RegisterModule(typeof(LogVisitModule<StaffMember>));
}