我在共享点站点上有一个 http 模块,该模块实例化一个自定义类并将其添加到会话中,并为我的站点执行其他初始操作。但是,我注意到所有请求类型(.aspx、.js、.png、.jpg)都调用了 http 模块。
有没有办法只为.net 特定页面类型调用 http 模块?
我在共享点站点上有一个 http 模块,该模块实例化一个自定义类并将其添加到会话中,并为我的站点执行其他初始操作。但是,我注意到所有请求类型(.aspx、.js、.png、.jpg)都调用了 http 模块。
有没有办法只为.net 特定页面类型调用 http 模块?
在 IIS 中,您将设置处理程序以与您的特定扩展关联,因此处理程序将仅应用于该扩展。不应处理 JavaScript 文件。
如果您正在考虑以任何方式将您的模块/处理程序与 SharePoint 集成,我也会看看这篇文章。
虽然我确实喜欢这种类型的 http 处理程序的易于部署(以及您不必为处理程序部署 web.config 条目的事实),但在您可能不想使用 _layouts 目录或您想要的情况下要拥有自定义文件扩展名,这是另一种也可以使用的替代方法(尽管它确实需要在 IIS 中进行一个手动配置步骤,因此它可能不适合“无接触部署”)
1) 像通常为 asp.net 应用程序一样创建您的 http 处理程序。由于您位于应用程序池中,因此您可以添加对 SharePoint DLL 的引用并与对象模型进行交互。
2) 添加并进入您的 web.config 以注册您的处理程序并定义您要使用的扩展。IE:
3) 通过 IIS > Web 站点属性 > 主目录 > 配置 > 映射在 IIS 中定义您的自定义扩展
在这种情况下,我们定义了处理程序将拾取的 .proxy 扩展名。我们的处理程序是一个 .NET 程序集,因此我们需要添加映射以将 .proxy 请求路由到 .net isapi dll (C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll).. 另外,制作确定你取消选中“
我做了更多的研究,似乎没有办法做我想做的事。我将不得不检查请求类型并从那里取消。
感谢大家的回答。
D
这是一些如何按扩展名过滤请求的简单示例...下面的示例从具有特定扩展名的处理文件中排除。
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);
}
}
在配置文件中指定应该排除哪些扩展并启动模块中的扩展列表。
您可以通过检查最后一个 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。