4

我在共享点站点上有一个 http 模块,该模块实例化一个自定义类并将其添加到会话中,并为我的站点执行其他初始操作。但是,我注意到所有请求类型(.aspx、.js、.png、.jpg)都调用了 http 模块。

有没有办法只为.net 特定页面类型调用 http 模块?

4

6 回答 6

0

在 IIS 中,您将设置处理程序以与您的特定扩展关联,因此处理程序将仅应用于该扩展。不应处理 JavaScript 文件。

于 2008-12-01T17:18:40.847 回答
0

如果您正在考虑以任何方式将您的模块/处理程序与 SharePoint 集成,我也会看看这篇文章。

于 2008-12-01T17:20:24.447 回答
0

虽然我确实喜欢这种类型的 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).. 另外,制作确定你取消选中“

来自对http://msdn.microsoft.com/en-us/library/bb457204.aspx的评论

于 2008-12-01T17:22:59.980 回答
0

我做了更多的研究,似乎没有办法做我想做的事。我将不得不检查请求类型并从那里取消。

感谢大家的回答。

D

于 2008-12-01T19:13:30.490 回答
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);
    }
}

在配置文件中指定应该排除哪些扩展并启动模块中的扩展列表。

于 2013-08-23T20:26:06.307 回答
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。

于 2009-05-29T10:19:33.423 回答