2010-08-05 62 views
7

更新如何確定請求是否是回發的結果?

我實現自定義的頁面緩存解決方案,我不希望請求被緩存或從緩存中檢索,如果它在響應表單提交或某種asp.net回發的。

我想弄清楚當前的HttpRequest是否是回發。有沒有辦法在頁面或其他用戶控件的上下文之外進行此操作?換句話說,如果我在HttpModule中,我無法訪問this.IsPostBack,但我仍然需要確定它是否實際上是回發。

此外,回發總是「發佈」的請求或是由包含表單確定?

謝謝!

+0

請您詳細說明「頁面或其他用戶控件的上下文之外」嗎? – Vaibhav 2010-08-05 17:17:00

+1

如果沒有ASP.NET頁面,則不能進行回發。否則,你擁有的只是一個普通的HTTP POST。 – 2010-08-05 17:19:37

+0

「IsPostBack」對你而言意味着什麼?就像,只有當數據傳遞給模塊...或什麼? – 2010-08-05 17:24:55

回答

9

檢查HttpWebRequestMethod財產。回傳應在Method中標記爲POST

而且,這樣你做了它在老學校的ASP是檢查在HTTP消息(Request.Form)的身體預期後回參數。您可以檢查數據請求的內容,看起來像回發參數。我不確定你使用的是什麼對象,但是如果它是HttpWebRequest,則可以檢查該對象的GetResponseStream()方法的請求流。

6
if (Request.ServerVariables["REQUEST_METHOD"] == "POST") { 
    // This is a POST 
} 
+0

本麥考馬克有一個更好的答案,但基本上是同樣的事情。 – jessegavin 2010-08-05 17:26:21

1

您可以獲得當前頁面的引用:Get current System.Web.UI.Page from HttpContext?

然後你可以檢查Page.IsPostBack屬性。

+0

這是很好的發現和我投票它,但它仍然不會爲我工作,因爲我在處理程序與請求相關聯之前攻入管道,因此HttpContext.Current.Handler始終爲空。 – Micah 2010-08-05 17:30:46

+0

在頁面呈現的哪個步驟中,您需要知道該頁面是否回發? – David 2010-08-05 17:39:35

3

HTTPHandler將有權訪問當前的HTTPContext。您可以使用它來檢查一些屬性(Request.RequestType,Request.URLReferrer)並手動確定它是否是PostBack。

5

以下靜態例程應該能夠確定當前請求是否是回發。但是,只有在執行ASPX頁面或派生頁面時才能使用。

public class PostBackUtility 
{ 
    public static Boolean IsPagePostBack 
    { 
     get 
     { 
      Page pageHandler = HttpContext.Current.CurrentHandler as Page; 
      if (pageHandler == null) return false; 
      return pageHandler.IsPostBack; 
     } 
    } 
} 

還應注意CurrentHandler可能尚未取決於哪個階段你試圖評估IsPagePostBack請求生命週期初始化。我相信這種方法只會在HttpApplication.PostMapRequestHandlerHttpApplication.ReleaseRequestState之間有效。

相關問題