2009-10-13 76 views
0

我有一個ASP.NET應用程序,我想設置一些額外的HTTP標頭(與頁面過期有關),如果請求是針對普通的ASPX頁面。不過,我不想爲圖片,AXD處理程序或靜態HTML頁面等東西添加這些標頭。ASP.NET - Global.asax檢測ASPX頁面請求與其他事情

什麼是在Global.asax請求開始處理程序中檢測的最佳方法,即當前請求是針對ASP.NET頁面的?

對於我來說,查看「aspx」的URL似乎是錯誤的,因爲當他們請求根頁面(如myapp.com/或myapp.com/products)時,它不起作用。它看起來很脆弱。

感謝,

〜賈斯汀

回答

1

您可以使用HttpContext.Current.Request。 CurrentExecutionFilePath,看看是否以「.aspx」結尾。

+0

嗯,這似乎是一個相當安全的方法。 – RationalGeek 2009-10-13 14:56:08

+1

如果使用頁面路由將友好的Url映射到實際頁面,則不起作用。 – 2016-02-19 01:06:57

0

無效的Application_BeginRequest(對象發件人,EventArgs的) {

string pathAndQuery = Request.Url.PathAndQuery.ToString(); 

    if (pathAndQuery.Contains(".aspx")) 
    //etc 

allthough它可能是更好的檢查與正則表達式,而不是包含

編輯:對不起,錯過了你的最後兩行......不知道你有子目錄

但您不必檢查aspx文件。所有在iis中映射到aspnet_isapi.dll的內容都將被處理。你可以這樣做:

if (!pathAndQuery.Contains(".axd")){ //etc. 
3

我建議你爲此創建HTTP模塊。 HTTP模塊專門用於這類任務。

http://www.15seconds.com/Issue/020417.htm

+0

我想實現一個HTTP模塊來增加一個在這種情況下,HTTP標頭是矯枉過正的。我們已經廣泛使用HTTP模塊,我不想加入混淆。謝謝你的想法。 – RationalGeek 2009-10-13 14:57:04

+1

聽起來像是我最合適的方法 – RichardOD 2009-10-13 15:28:48

0

在.NET 4.0及以上版本,你可以檢查...

HttpContext.Current.Request.CurrentExecutionFilePathExtension 

應返回 「的.aspx」

你會得到正確的擴展名沒有任何查詢字符串值,甚至當您的請求用於默認頁面時(例如「www.myhost.com/myfolder/」)。

2

ASP.Net框架已經開始識別aspx頁面和其他東西了。爲什麼又要做同樣的事情?而是利用已識別的處理程序,然後採取相應措 如果Application_PreRequestHandlerExecute處理程序,this.Context.Handler屬性由框架設置。檢查此屬性的類型以匹配ASPX頁面類的類型。你在Global.asax.cs中的代碼會是這個樣子:

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     if(this.Context.Handler is System.Web.UI.Page) 
     { 
      //Do what you need to do for aspx requests 
     } 
    } 

這種方法在URL路由的所有條件下工作,改寫和絕對出衆(在我看來)比做任何形式的利益URL上的字符串比較。

+0

使用AJAX調用aspx頁面來完成這項工作嗎? – 2017-12-14 21:20:35

0

如果使用路由/友好的URL,可以使用HttpRequest.GetFriendlyUrlFileExtension()擴展方法(在Microsoft.AspNet.FriendlyUrls組裝),以獲得基本的文件類型(例如「的.aspx」)