我正在使用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)時,會話沒有啓動。
「Default.aspx頁面僅用於捕獲根文件夾訪問並將請求重定向到其他.aspx頁面」,您可以將IIS(或web.config)中的「Default Document」設置從Default .aspx到(custom.aspx在你的情況下)無論你想要在這裏看到的頁面:http://www.iis.net/configreference/system.webserver/defaultdocument – robasta
默認頁面根據數據庫中的設置而改變,它來自應用程序邏輯所以它不能被硬編碼。 –
我只是作爲一個例子寫了custom.aspx。對不起,混亂:) –