我在sharepoint站点上有一个http模块,该模块实例化一个自定义类并将其添加到会话中,并为我的站点执行其他初始操作。 但是,我注意到正在为所有请求类型(.aspx,.js,.png,.jpg)调用http模块。
有没有办法只为.net特定页面类型调用http模块?
答案 0 :(得分:0)
在IIS中,您将设置与特定扩展名关联的处理程序,以便处理程序仅应用于该扩展名。不应处理JavaScript文件。
答案 1 :(得分:0)
我还要看看this article您是否正在考虑以任何方式将模块/处理程序与SharePoint集成。
答案 2 :(得分:0)
虽然我确实喜欢这种类型的http处理程序的易部署(以及您不必为处理程序部署web.config条目这一事实),但在您可能不想使用_layouts目录的情况下或者你想拥有一个自定义文件扩展名,这里有一个可行的替代方法(尽管它在IIS中需要一个手动配置步骤,因此它可能不适合“无接触部署”)
1)像往常一样为asp.net应用程序创建你的http处理程序。您可以添加对SharePoint DLL的引用,并与对象模型进行交互,因为您位于应用程序池中。
2)添加并输入您的web.config以注册您的处理程序并定义您要使用的扩展程序。 IE:
3)通过IIS>在IIS中定义自定义扩展。 Web SIte Properties>主页目录>配置>映射
在这种情况下,我们定义了一个处理程序将获取的.proxy扩展名。我们的处理程序是一个.NET程序集,所以我们需要添加映射以将.proxy请求路由到.net isapi dll(C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll)..同时,make确定你取消检查“
答案 3 :(得分:0)
我做了一些研究,似乎没有办法做我想要的事情。 我将不得不检查请求类型并从那里取消。
感谢大家的回答。
d
答案 4 :(得分:0)
您可以通过检查最后一个Uri.Segments内容中的扩展名,使用HttpModule(在对昂贵的SharePoint对象模型进行任何调用之前)以非常轻量级的方式执行此操作
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
Uri uri = app.Request.Url;
string lastSegment = uri.Segments[uri.Segments.Length-1];
.. check your extension here an do nothing if it doesn't match.
..
}
我们在SharePoint的'TinyURL'实现中使用它,以确保对常规URL的性能影响几乎为0.
答案 5 :(得分:0)
以下是一些如何按扩展名过滤请求的简单示例...以下示例从具有特定扩展名的处理文件中排除。
public class AuthenticationModule : IHttpModule
{
private static readonly List<string> extensionsToSkip = AuthenticationConfig.ExtensionsToSkip.Split('|').ToList();
// In the Init function, register for HttpApplication
// events by adding your handlers.
public void Init(HttpApplication application)
{
application.BeginRequest += new EventHandler(this.Application_BeginRequest);
application.EndRequest += new EventHandler(this.Application_EndRequest);
}
private void Application_BeginRequest(Object source, EventArgs e)
{
// we don't have to process all requests...
if (extensionsToSkip.Contains(Path.GetExtension(HttpContext.Current.Request.Url.LocalPath)))
return;
Trace.WriteLine("Application_BeginRequest: " + HttpContext.Current.Request.Url.AbsoluteUri);
}
private void Application_EndRequest(Object source, EventArgs e)
{
// we don't have to process all requests...
if (extensionsToSkip.Contains(Path.GetExtension(HttpContext.Current.Request.Url.LocalPath)))
return;
Trace.WriteLine("Application_BeginRequest: " + HttpContext.Current.Request.Url.AbsoluteUri);
}
}
在配置文件中指定应排除哪些扩展名并启动模块中的扩展名列表。