【问题标题】:Page Load fires twice after url rewritingurl 重写后页面加载触发两次
【发布时间】:2011-12-02 13:33:36
【问题描述】:

我有一个页面 (DetaliiProdus.aspx),我在其中应用了这个 url 重写规则:

 <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>

如果我直接访问页面,如您在操作 url 中看到的那样(例如:“/Site/DetaliiProdus.aspx?c=m1&p=868&s1=60&s2=140”),页面加载会触发一次,一切正常.

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

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

【问题讨论】:

    标签: asp.net url-rewriting


    【解决方案1】:

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

    【讨论】:

    • 就我而言,这就是答案。在寻找相同问题的解决方案时,我偶然发现了这个答案,它促使我仔细检查我的资源,果然我正在加载一个空 src 值的 CSS 样式表。这是两次调用我的页面。在 Google 的网络控制台中仔细观察后,很容易发现。
    【解决方案2】:

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

    <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事件触发。

    【讨论】:

      猜你喜欢
      • 2017-10-01
      • 2022-01-25
      • 2018-10-07
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多