TLDR:出站规则未在updatepanel部分回发中应用
我正在使用IIS 7.5 URL重写器将图像路径映射到cdn。
以下是正在发生的事情的简化版本
<Repeater Goes Here>
<img alt="alt text" src="<%#getImageSource(Eval("Filename").ToString() )%>">
<End of Repeater>
假设函数getImageSource返回"/images/someimage.jpg"
这反过来重写为
<img alt="alt text" src="http://img.cdn.com/someimage.jpg">
使这项工作的出站规则是:
<rule name="Out_Rewrite_ServeCookieLessImages" preCondition="ResponseIsHtml" enabled="true">
<match filterByTags="Img" pattern="^/Images/(.*)$"/>
<action type="Rewrite" value="http://img.cdn.com/{R:1}"/>
</rule>
<preConditions>
<preCondition name="ResponseIsHtml">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html"/>
<add input="{URL}" pattern="\.axd.*$" negate="true"/>
</preCondition>
</preConditions>
问题是在更新面板中使用转发器时
异步回发后输出的实际html是
<img alt="alt text" src="/Images/someimage.jpg">
而不是
<img alt="alt text" src="http://img.cdn.com/someimage.jpg">
如何让updatepanel正确解析输出?
提前致谢
编辑:我在这一点上的猜测是它必须对页面生命周期做些什么...或者可能调用重写模块的顺序......将保持更新
答案 0 :(得分:3)
使用UpdatePanel时服务器返回的响应内容类型是text / plain而不是text / html。
您列出的ResponseIsHtml前提条件仅匹配text / html内容,因此不会重写UpdatePanel响应。
如果您修改输入正则表达式以捕获text / plain,那么您的内容将按原样重写:
<preConditions>
<preCondition name="ResponseIsHtml">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/[html|plain]"/>
<add input="{URL}" pattern="\.axd.*$" negate="true"/>
</preCondition>
</preConditions>
不幸的是,执行此操作存在一个问题,我尚未找到解决方案 - 重写响应会导致UpdatePanel ajax管理器抛出ys.WebForms.PageRequestManagerParserErrorException。