У меня есть модуль http на сайте sharepoint, и этот модуль создает экземпляр пользовательского класса и добавляет его в сеанс, а также выполняет другие начальные действия для моего сайта. Однако я заметил, что модуль http вызывается для всех типов запросов (.aspx, .js, .png, .jpg).
Есть ли способ вызвать модуль http только для конкретных типов страниц .net?
Ответ 1 · Ryan Montgomery
В IIS вы настроите обработчик, который будет связан с вашим конкретным расширением, поэтому обработчик будет применяться только к этому расширению. Файлы JavaScript не должны обрабатываться.
Ответ 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);
}
}
В конфигурационном файле укажите, какие расширения следует исключить, и инициируйте список расширений в модуле.