我试图弄清楚为什么某些路径可以工作,而另一些路径不能用于同一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>
处理程序将为这两种实现触发。
答案 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
中