我在IIS7上運行的ASP.NET 3.5應用程序中使用Context.RewritePath()。IIS7,RewritePath和IIS日誌文件
我在應用程序BeginRequest事件和一切工作文件中這樣做。
將/ sports的請求正確地重寫爲default.aspx?id = 1,依此類推。
問題是,在我的IIS日誌中,我看到/Default.aspx?id=1的GET請求,而不是/ sports。
這種代碼在IIS6下完美工作。
由於必須實施某些業務邏輯,因此不能使用Microsoft Rewrite模塊。
謝謝。
編輯:
看來我的處理程序是在管線爲時尚早,但如果我移動邏輯到以後的事件,比整個重寫的東西不起作用(爲時已晚,StaticFileHandler拿起我的請求)。
我用Google搜索了一下,問了一下,不敢相信沒有人有這個問題?
編輯:
哎呀!這是我在IIS論壇上找到的:
「這是因爲在集成模式下,IIS和asp.net共享一個通用管道,並且IIS現在可以看到RewritePath,而在IIS6中,IIS甚至沒有看到 - 你可以通過使用經典的模式來解決這個問題,它的行爲就像IIS6一樣。「
最終更新:請看看my answer below,我已經在生產環境中使用了一年多的結果更新了它。
Muerte,這樣做的正確方法是回答你自己的問題。您指出,通過將IIS 7置入經典模式(與IIS 6執行相同的操作方式),可以解決此問題。只要您意識到您不會從新IIS 7中的安全性或性能升級中受益,那麼這似乎是一個合理的答案。 – Spence 2009-02-17 12:47:29
我明白我可以回答我自己的問題,但我不認爲這是一個答案,我仍然在追求這個追求。 :)我嘗試了一些東西,並且我一定會添加我的結果,無論是作爲答案還是作爲我的問題的最終編輯。 – muerte 2009-02-17 15:50:19
我會(並且只是)通過Reflector來查看System.Web.Routing程序集。看哪裏掛鉤。 IIRC,你需要在PostMapRequestHandler和PostAcquireRequestState中完成。 – leppie 2009-02-12 11:50:32