2013-03-26 65 views
1

TLDR適用於:出站規則不裏面的UpdatePanel


我使用的是IIS 7.5 URL重寫映射圖像路徑到一個CDN出站規則不是的UpdatePanel部分回發中應用。

這裏發生了什麼

的簡化版本
<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解析輸出是否正確?

在此先感謝


編輯:我在這一點上的猜測是,它必須做一些與頁面生命週期......或許在重寫模塊調用的順序...會保持更新

回答

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。

相關問題