HttpHandlers触发某些路径,但不是全部

时间:2018-10-19 17:26:08

标签: c# iis httphandler

我试图弄清楚为什么某些路径可以工作,而另一些路径不能用于同一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 :(得分:1)

我更喜欢在服务器上运行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链接(或其他任何非Web控件,您可以执行以下操作:

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

答案 1 :(得分:0)

所以事实证明上述方法确实有效,并且我设置了一个重写规则,该规则将这些请求重定向到    http://localhost:80/redacted/user?site=icons

我为图标添加了防重写路径,现在可以使用。

E:防重写路径如下:

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

在rewriteRules.config