Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как использовать http-модуль для событий пожара только для определенных типов страниц

Автор вопроса: CommunityОтветов: 5

У меня есть модуль http на сайте sharepoint, и этот модуль создает экземпляр пользовательского класса и добавляет его в сеанс, а также выполняет другие начальные действия для моего сайта. Однако я заметил, что модуль http вызывается для всех типов запросов (.aspx, .js, .png, .jpg).

Есть ли способ вызвать модуль http только для конкретных типов страниц .net?

sharepointhttpmodulesharepoint-2007

Ответы

Ответ 1 · Ryan Montgomery

В IIS вы настроите обработчик, который будет связан с вашим конкретным расширением, поэтому обработчик будет применяться только к этому расширению. Файлы JavaScript не должны обрабатываться.

Ответ 2 · Ryan Montgomery

Я также хотел бы взглянуть на эту статью, которую вы просматриваете любой интеграции вашего модуля/обработчика с SharePoint.

Ответ 3 · Community

Я провел немного больше исследований, и кажется, что нет никакого способа сделать то, что я намереваюсь. Мне нужно будет проверить тип запроса и отменить оттуда.

Спасибо всем за ответы.

D

Ответ 4 · Jeroen Ritmeijer

Вы можете сделать это очень простым способом, используя HttpModule (перед выполнением каких-либо вызовов дорогостоящей объектной модели SharePoint), проверив расширение в содержимом последнего Uri.Segments.

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.
    ..
}

Мы используем это в нашей реализации "TinyURL" для SharePoint, чтобы обеспечить почти нулевое влияние на производительность обычных URL-адресов.

Ответ 5 · Mr. Pumpkin

Вот простой пример, как фильтровать запросы по расширению... пример ниже исключает из обработки файлы с определенными расширениями.

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);
    }
}

В конфигурационном файле укажите, какие расширения следует исключить, и инициируйте список расширений в модуле.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы