我正在开发 sharepoint 2010 网络应用程序。我想通过使用从 SPHttpApplication 继承的 Global.asax 以经典的 asp.net 方式处理一些 Applicaton 事件(Begin_Request、End_Request、Application_Start)。
我找到 了两种 区分的方法。
第一个建议在 Global 类中重载 SPHttpApplication 。好主意,但不适合我,因为我的应用程序部署到另一个主站点的子站点。如果有办法绕过这一刻,那将是一个很好的解决方案!
第二个建议实现 IHttpModule 接口并从 HttpApplication 上下文变量注册事件。它适合我,我创建了一个类库项目,其中一个类实现了这个接口。我还在 web.config 文件中添加了特殊记录:
<httpModules>
<add name="DSModule" type="Artec.DS.HttpContext.DSModule, DSModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31a3567341f39f94"/>
</httpModules>
其中“Artec.DS.HttpContext”是项目名称,DSModule 是类名称。毕竟,当我开始调试时,不会调用“Init()”方法。
更新
namespace Artec.DS.HttpContext
{
public class DSModule : IHttpModule
{
public void Dispose()
{
throw new NotImplementedException();
}
public void Init(HttpApplication context)
{
System.Diagnostics.Debugger.Launch();
ApplicationVariables.AppPath = context.Server.MapPath("/");
NhibernateManager.Init();
NavigationManager.Init();
}
}
}
首先我的 web.config 有错误的“类型”属性。我对类名而不是程序集名感到困惑。所以格式良好的标签如下:
<add name="DSModule" type="Artec.DS.HttpContext.DSModule, Artec.DS.HttpContext, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31a3567341f39f94" />
修改 web.config system.webServer/modules 后(感谢CBono) Init() 被调用,这是我最初问题的答案。
但现在我收到错误:“System.Web.HttpException:服务器操作在此上下文中不可用。” 尝试映射服务器路径时:
context.Server.MapPath("/")