2010-11-19 57 views
0

我有一個在IIS 7中運行的HTTPModule,提供了許多不同的URL重寫服務。IIS7 HTTPModule無法重寫MVC子應用程序的路徑

例如:

public void Init(HttpApplication context) 
{ 
    ... 
    HttpContext.Current.RewritePath(landingPage.NewPath, 
           string.Empty, 
           landingPage.NewQueryString + 
           ((landingPage.NewQueryString == string.Empty) ? "" : "&") + 
           queryString); 
    ... 
} 

我有寫在MVC自己的應用程序池的子應用:http://www.SomeSiteWithURLrewrite.com/SubMVCApplication/

該模塊的偉大工程除了創建爲子應用程序的MVC應用程序之外。

當我發出HTTP請求,將被重寫:http://www.SomeSiteWithURLrewrite.com/Arbitrary/Path/To/Be/Rewritten

我接收HTTP錯誤404.0 - 找不到

404錯誤頁面顯示有一個對「http://www.SomeSiteWithURLrewrite.com/Arbitrary/Path/To/Be/Rewritten」的調用已被重寫爲物理路徑「C:{Root Directory \ SubMVCApplication \「與」StaticFile「的處理程序。

我不知道爲什麼管道不識別「HttpContext.Current.RewritePath」作爲MVC請求。是否因爲MVC應用程序在它自己的應用程序中?

我怎麼能說RewritePath(或類似的東西),並有IIS呈現一個ASP.Net MVC page.in子應用

回答

2

如果你跨越應用程序邊界,你需要做的Response.Redirect哪些問題基於客戶端的HTTP 301重定向命令

ReWritePath是服務器唯一的命令,並且需要路由表等。因此,只有當前的應用邊界接入

有沒有簡單的答案,不是使在一個頁面代理其他每個Web應用程序都要通過內容,但這會非常低效

例如server.com/a/x重寫到server.com/b/x,您的代碼將不得不檢測應用程序邊界changem,而是在重定向時發出HTTPRequest以獲取server.com/b/x內容並將該內容傳遞給客戶端?資源路徑等將成爲一個大問題,所以可能不是一個好主意

0

我完全不同意TFD's answer。 一切都取決於你想要實現的算法。

Here您可以找到有關路由和URL重寫的詳細說明。 至於我要實現的樹基本URL結構的原因是更好地使用URL路由之前重寫,以

變換網址:my.site.com/page1/page2/page3/faq.aspx
到:my.site.com/content/faq.aspx?parent=page3/page2/page1

其中content是控制器的名字和faq是唯一標識符。

可以從數據庫或站點地圖文件中獲取數據。