HttpHandlers работают для некоторых путей, но не для всех - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь выяснить, почему одни пути работают, а другие нет для одного и того же httphandler.Я на IIS10.

Мой обработчик выглядит так:

<add name="IconStore" preCondition="integratedMode" path="icons/*" verb="*" type="SomePath.Controls.IconStoreHandler, SomePath.Controls"/>

И этот обработчик сработает по этому пути:

<img class="tip" data-tip="redacted" src="icons/interface-question-mark">

Который добавляется сюда:

<asp:Image runat="server" CssClass="tip" data-tip="<%$ Resources:Resources, Redacted%>" ImageUrl="icons/interface-question-mark" />

, но не сработает для этой реализации:

<div class="redacted" initialized="true" title="" style="background-image: url("icons/interface-question-mark");"></div>

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

Почему первая реализация срабатывает, а вторая - нет?Если я использую другой путь обработчика, например:

      <add name="Icon.axd" preCondition="integratedMode" path="Icon.axd" verb="GET" type="SomePath.Controls.IconStoreHandler, SomePath.Controls"/>

И тогда моя реализация будет выглядеть примерно так:

<div class="redacted" initialized="true" title="" style="background-image: url("Icon.axd?name=test");"></div>

Обработчик сработает для обеих реализаций.

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Таким образом, вышеприведенное работает, и у меня было настроено правило перезаписи, которое перенаправляло эти запросы на http://localhost:80/redacted/user?site=icons

Я добавил путь анти-перезаписи для значков, и онтеперь работает.

E: Путь анти-перезаписи выглядит следующим образом:

<add input="{URL}" pattern="^/[\w-]+/icons/*" negate="true" />

в rewriteRules.config

0 голосов
/ 19 октября 2018

Я предпочитаю запуск генерации URL на сервере, и пусть asp.net определяет, какой путь использовать.Для этого вы можете использовать тильду (~) для представления корня пути приложения.

например, вы должны изменить

<asp:Image runat="server" ImageUrl="icons/interface-question-mark" />

на

<asp:Image runat="server" ImageUrl="~/icons/interface-question-mark" />

~Вот ваше корневое приложение в IIS, поэтому, если вы работаете локально, используя тильду, это эквивалентно вводу этого слова перед URL

http://localhost/myappname

Результирующий URL из первого примера будет эквивалентен

http://localhost/myappname/icons/interface-question-mark

Для ваших ссылок CSS (или чего-либо еще, кроме веб-контроля, вы можете сделать это:

<div class="redacted" style="background-image: url('<%= Page.ResolveUrl("~/icons/interface-question-mark")');"></div>
...