2009-06-26 56 views
1

讓我說說我不熟悉ASP.Net MVC的蝙蝠,我認爲我沒有時間讓這個項目變得熟悉和切換。強制所有asp.net請求到單個頁面?

我正在構建一個只有一個物理頁面的網站mysite.com/default.aspx。如果用戶瀏覽到mysite.com/foo/bar,我(不知何故)希望我的default.aspx來處理該請求。我知道這聽起來很「路線」/「控制器」導向......但是有沒有辦法做到這一點,而不需要全身心投入MVC?

另外值得注意的是,該網站也將有靜態圖像和我不希望我的網頁提供的東西...所以生成的mysite.com/foo/bar html可能有html,其中包括img標籤與src mysite.com/images/foo.gif,所以我需要能夠排除某些文件夾/文件/什麼不被處理。

回答

4

你在說什麼稱爲URL重寫,是的​​,ASP.Net表單應用程序是有能力的。此項似乎相當不錯解釋這裏的技術:

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

要允許HTTP重寫對不存在在IIS 6中,你需要實現通配符映射文件。 ASP.Net MVC獵物下降到同樣的問題所以即使你不使用ASP.Net MVC這篇文章仍然是相關的:

http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

向下滾動到標題:「IIS6擴展名的網址

如果您需要弄清楚如何進入顯示的IIS屬性窗口,請向上滾動一些上下文。只要忽略關於.mvc擴展的部分即可。

+0

這是一種工作......但我如何得到任何模塊,以獲取對物理上不存在的文件的請求? – Jonas 2009-06-26 21:34:57

0

您可以設置IIS將所有404請求重定向到您的網站。如果我沒有記錯,那麼IIS 6中會有一個錯誤(如果這是你正在運行的),它將返回一個200狀態碼,允許你進行正常的處理。

否則,你可以使用web.config中的標籤來處理重定向 - 但是,我認爲這可能會返回404錯誤代碼。

希望有幫助!

0

我覺得我有什麼工作,在IIS7 ...但它似乎有點脆:

我有一個HttpModule,設置這樣的:

<modules runAllManagedModulesForAllRequests="true"> 
    <remove name="ScriptModule" /> 
    <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    <add name="MyRewriteModule" preCondition="managedHandler" type="MyWeb.MyRewriteModule, MyWeb" /> 
</modules> 

和我模塊的代碼如下:

void context_BeginRequest(object sender, EventArgs e) 
{ 
    HttpApplication app = (HttpApplication)sender; 
    HttpRequest request = app.Context.Request; 
    List<string> ignoreExtensions = new List<string>() { "axd", "gif", "ico" }; 
    if(ignoreExtensions.TrueForAll(s => !request.FilePath.ToLower().EndsWith(s))) 
    app.Context.RewritePath("~/default.aspx", request.Path, request.QueryString.ToString(), true); 
} 

很明顯,我會緩存和擴大該列表...但總體看來工作。任何人都可以指出任何明顯的缺點?

0

只是修改你的404錯誤頁面重定向到default.aspx。

相關問題