我有一个页面(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}&p={R:2}&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}&p={R:2}&s1={R:3}&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个多小时:(...
答案 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事件触发问题。