URL重写后,页面加载会触发两次

时间:2011-10-06 20:28:58

标签: asp.net url-rewriting

我有一个页面(DetaliiProdus.aspx),我已应用此网址重写规则:

 <rewrite>
    <rules>
      <rule name="DetaildProductSub1" stopProcessing="true">
        <match url="produse/([_0-9a-z-]+)/([0-9]+)/([0-9]+)/([_0-9a-z-]+)" />
        <action type="Rewrite" url="Site/DetaliiProdus.aspx?c={R:1}&amp;p={R:2}&amp;s1={R:3}" appendQueryString="false"/>
      </rule>
      <rule name="DetaildProductSub1Sub2" stopProcessing="true">
        <match url="produse/([_0-9a-z-]+)/([0-9]+)/([0-9]+)/([0-9]+)/([_0-9a-z-]+)" />
        <action type="Rewrite" url="Site/DetaliiProdus.aspx?c={R:1}&amp;p={R:2}&amp;s1={R:3}&amp;s2={R:4}" appendQueryString="false"/>
      </rule>
    </rules>
  </rewrite>

如果我直接按照你在动作网址中看到的页面(例如:“/ Site / DetaliiProdus.aspx?c = m1&amp; p = 868&amp; s1 = 60&amp; s2 = 140”),页面加载是一次解雇,所有工作都很棒。

如果我使用url重写规则访问该页面:(例如:“/ produse / m1 / 868/60/140 / Biserica%20in%20asediu”)页面加载方法被多次触发(3次)

你能告诉我为什么会出现这个问题吗?我已经花了3个多小时:(...

2 个答案:

答案 0 :(得分:2)

查找正在加载并通过路由规则传递到处理程序页面的其他资源 - 如果为页面加载了.js,.css等文件,则表单加载可能会在重新路由期间多次触发。发生这种情况时,您可以测试HttpContext对象以查看所请求资源的名称,然后在必要时中止处理。 最好先在管道中过滤请求,但如果多次调用页面加载,请考虑在页面加载(或页面初始化等)中进行过滤。

答案 1 :(得分:1)

我最近在启用IIS URL重写的情况下将Page_Load激活了3次。 要解决此问题,请在重写规则中添加以下条件:

<rule name="Some rule">
  ...
  <conditions logicalGrouping="MatchAny">
      <add input="{URL}" pattern="^.*\.(dxr|ashx|axd|css|gif|png|jpg|jpeg|js|flv|f4v)$"  negate="true" /> 
  </conditions>
</rule>

如此处所述:IIS url rewrite - css and js incorrectly being rewritten

具有上述扩展名的文件将不会被重写,以解决缓慢加载时间和多个Page_Load事件触发问题。