2012-10-08 37 views
3

我正在使用VS 2010,.NET 4.0,ASP.NET Web應用程序項目。根文件夾的asp.net處理程序

我有自定義的HttpHandler處理* .aspx。 在根文件夾中我有Default.aspx頁面,只用於捕獲根文件夾訪問並將請求重定向到其他.aspx頁面,並且該請求由我的自定義處理程序進一步處理。

如果請求被指向根文件夾,Default.aspx將被處理。如果請求發送到* .aspx(任何其他Default.aspx),我的自定義處理程序將處理它。

我想從項目中刪除Default.aspx頁面,並仍然能夠捕獲到我的根應用程序文件夾的請求,並將請求重定向到我的自定義處理程序。

我試圖與在Global.asax中註冊的路線:

private void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapPageRoute("Default", 
      "", 
      "~/Default.aspx"); 
    } 

,沒有工作。

而且,我已經試過在web.config中處理登記:

<add name="DefaultHandler" path="*" verb="*" type="App.DefaultHandler, App" /> 

,但沒有工作過。

UPDATE:

事實上,在web.config中path="*"定義的處理程序的工作,但它捕獲到,我不認爲這是很好的做法服務器的所有請求。

我已經創建了DefaultModule,我在BeginRequest事件上檢查了Request中的Path屬性,並假設這是對默認頁面的請求。到目前爲止,一切都很好,但我不知道它會在所有情況下,這裏是代碼:

public void Init(HttpApplication context) 
    { 
     context.BeginRequest += new EventHandler(context_BeginRequest); 
    } 

    void context_BeginRequest(object sender, EventArgs e) 
    { 
     HttpRequest request = HttpContext.Current.Request; 
     if (request.Path == "/") 
     { 
      HttpContext.Current.RewritePath("custom.aspx"); 
     } 
    } 

如果任何人有任何更好的主意我將不勝感激,謝謝。

UPDATE:

我一直在使用這一解決方案的嘗試: https://stackoverflow.com/a/1913073/84852 我認爲,Web服務器將請求Default.aspx的,然後我可以使用處理程序描述趕上要求,但應用程序只是閱「文件不發現「異常。

無論如何,我喜歡HttpModule的解決方案,如果沒有其他解決方案,我會隨它一起去的。我只是擔心條件if (request.Path == "/"),所以我只是在情況下,它改變

if (context.Request.CurrentExecutionFilePath == context.Request.ApplicationPath) 

新的想法仍然值得歡迎。謝謝。

UPDATE:

解決方案與HTTP模塊不會在IIS上工作,但僅VS開發服務器上。問題是當請求到達我的自定義HttpHandler(btw實現IRequiresSessionState)時,會話沒有啓動。

+0

「Default.aspx頁面僅用於捕獲根文件夾訪問並將請求重定向到其他.aspx頁面」,您可以將IIS(或web.config)中的「Default Document」設置從Default .aspx到(custom.aspx在你的情況下)無論你想要在這裏看到的頁面:http://www.iis.net/configreference/system.webserver/defaultdocument – robasta

+0

默認頁面根據數據庫中的設置而改變,它來自應用程序邏輯所以它不能被硬編碼。 –

+0

我只是作爲一個例子寫了custom.aspx。對不起,混亂:) –

回答

0

如果我正確理解你的問題,我相信你的路徑應該是這樣的:

路徑= *將使捕獲所有請求,同時*的.aspx將限制它與.aspx擴展要求。

+0

是的,但如果您請求'http:// localhost /'它不會觸發處理程序映射到* .aspx –

+0

不會IIS將您路由到默認文檔(推測是一個.aspx)在那種情況?雖然重新閱讀後,我可能有點困惑。這聽起來像你基本上試圖有一個HttpHandler,取代你的默認文檔?或者更確切地說有一個HttpHandler處理默認的文檔,而不是讓IIS執行它? –

+0

我以爲使默認的http處理程序,即只處理根目錄中的default.aspx的處理程序,並讓IIS默認路由到默認處理程序將做的伎倆。但事實並非如此。 IIS沒有請求default.aspx,並且沒有請求默認處理程序。我已經從路由中刪除了所有其他默認文件,最終可能會成爲默認頁面。我可能沒有被正確解釋,因爲英語不是我的語言,我會盡力在後面的問題上做得更好。我已經有了可以接受的HttpModule解決方案,我也會發布。 –