我實現自定義的頁面緩存解決方案,我不希望請求被緩存或從緩存中檢索,如果它在響應表單提交或某種asp.net回發的。
我想弄清楚當前的HttpRequest是否是回發。有沒有辦法在頁面或其他用戶控件的上下文之外進行此操作?換句話說,如果我在HttpModule中,我無法訪問this.IsPostBack
,但我仍然需要確定它是否實際上是回發。
此外,回發總是「發佈」的請求或是由包含表單確定?
謝謝!
我實現自定義的頁面緩存解決方案,我不希望請求被緩存或從緩存中檢索,如果它在響應表單提交或某種asp.net回發的。
我想弄清楚當前的HttpRequest是否是回發。有沒有辦法在頁面或其他用戶控件的上下文之外進行此操作?換句話說,如果我在HttpModule中,我無法訪問this.IsPostBack
,但我仍然需要確定它是否實際上是回發。
此外,回發總是「發佈」的請求或是由包含表單確定?
謝謝!
檢查HttpWebRequest
的Method
財產。回傳應在Method
中標記爲POST
。
而且,這樣你做了它在老學校的ASP是檢查在HTTP消息(Request.Form
)的身體預期後回參數。您可以檢查數據請求的內容,看起來像回發參數。我不確定你使用的是什麼對象,但是如果它是HttpWebRequest
,則可以檢查該對象的GetResponseStream()
方法的請求流。
if (Request.ServerVariables["REQUEST_METHOD"] == "POST") {
// This is a POST
}
本麥考馬克有一個更好的答案,但基本上是同樣的事情。 – jessegavin 2010-08-05 17:26:21
您可以獲得當前頁面的引用:Get current System.Web.UI.Page from HttpContext?
然後你可以檢查Page.IsPostBack屬性。
HTTPHandler將有權訪問當前的HTTPContext。您可以使用它來檢查一些屬性(Request.RequestType,Request.URLReferrer)並手動確定它是否是PostBack。
以下靜態例程應該能夠確定當前請求是否是回發。但是,只有在執行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.PostMapRequestHandler
和HttpApplication.ReleaseRequestState
之間有效。
請您詳細說明「頁面或其他用戶控件的上下文之外」嗎? – Vaibhav 2010-08-05 17:17:00
如果沒有ASP.NET頁面,則不能進行回發。否則,你擁有的只是一個普通的HTTP POST。 – 2010-08-05 17:19:37
「IsPostBack」對你而言意味着什麼?就像,只有當數據傳遞給模塊...或什麼? – 2010-08-05 17:24:55