HttpHandlers 为某些路径触发,但不是全部
HttpHandlers fire for some paths but not all
我想弄清楚为什么某些路径对同一个 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 的检查器中复制不起作用的元素时,双引号是 "
但我做了一些研究并且似乎不是问题。
为什么第一个实现会触发,而第二个不会?如果我使用不同的处理程序路径,例如:
<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>
处理程序将为两种实现触发。
我更喜欢 运行 针对服务器生成 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>
所以事实证明以上确实有效,我设置了一个重写规则,将这些请求重定向到
http://localhost:80/redacted/user?site=icons
我为图标添加了防重写路径,现在可以使用了。
E:反重写路径如下:
<add input="{URL}" pattern="^/[\w-]+/icons/*" negate="true" />
在rewriteRules.config
我想弄清楚为什么某些路径对同一个 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 的检查器中复制不起作用的元素时,双引号是 "
但我做了一些研究并且似乎不是问题。
为什么第一个实现会触发,而第二个不会?如果我使用不同的处理程序路径,例如:
<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>
处理程序将为两种实现触发。
我更喜欢 运行 针对服务器生成 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>
所以事实证明以上确实有效,我设置了一个重写规则,将这些请求重定向到 http://localhost:80/redacted/user?site=icons
我为图标添加了防重写路径,现在可以使用了。
E:反重写路径如下:
<add input="{URL}" pattern="^/[\w-]+/icons/*" negate="true" />
在rewriteRules.config