Укажите корень приложения в отображении обработчика web.config - PullRequest
2 голосов
/ 14 марта 2011

У меня есть приложение с HttpHandler, которое обрабатывает любые запросы на файл .js.Я только хочу, чтобы этот обработчик обрабатывал файлы * .js, которые запрашиваются в корне приложения.

Отображение обработчика выглядит следующим образом:

<add name="HandleJS" path="*.js" verb="*" type="MyApp.JsHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />

В настоящее время этот обработчик обрабатывает ВСЕ запрошенные* .js файлы.Вот пример поведения, которое я хочу.

Этот запрос будет обработан обработчиком:
http://localhost/myapps/approot/script.js

, а этот не будет обработанот обработчика:
http://localhost/myapps/approot/dontProcessMe/script.js

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

Это непохоже, что свойство path элемента add позволяет использовать корневой механизм приложения ~/, поэтому настройка path="~/*.js" не работает.

Я также пытался реплицировать обработчик StaticFile, встроенный в IIS, и делал что-то вроде этого:

<add name="MyStaticFiles" path="*/*.js" verb="*" modules="StaticFileModule" />

или

<add name="MyStaticFiles" path="dontProcessMe/*.js" verb="*" modules="StaticFileModule" />

Оба из них просто возвращаютпустой ответ с HTTP-статусом 200.

Помоги мне, Оби Ван Кеноби, ты моя единственная надежда.

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Может быть проверять RequestURL в самом обработчике и возвращать фактический файл, если обработка не требуется?

public void ProcessRequest(HttpContext context)
{
    var applicationPath = context.Request.ApplicationPath;
    var pathAndQuery = context.Request.Url.PathAndQuery;

    var appRelativePath = pathAndQuery.Replace(applicationPath, "");

    var basePath = VirtualPathUtility.GetDirectory(appRelativePath);

    if (basePath != "/")
    {
        // load and return actual file
    }
    else
    {
        // custom logic
    }
}
0 голосов
/ 14 марта 2011

Без кубиков на path="/*.js"?

По умолчанию он должен работать с относительными путями ...

...