如何确定请求是否是回发的结果?

时间:2010-08-05 17:14:31

标签: asp.net

更新

我正在实现自定义页面缓存解决方案,如果响应表单提交或某种asp.net回发,我不希望从缓存中缓存或检索请求。

我正在试图弄清楚当前的HttpRequest是否是一个回发。有没有办法在页面或其他用户控件的上下文之外执行此操作?换句话说,如果我在HttpModule中,我无权访问this.IsPostBack,但我仍然需要确定它是否实际上是一个回发。

此外,回发总是“发布”请求还是由包含表单确定?

谢谢!

6 个答案:

答案 0 :(得分:9)

检查Method的{​​{1}}属性。回复应在HttpWebRequest中标记为POST

此外,你在老派asp中的方式是检查HTTP消息正文中的预期回发后参数(Method)。您可以检查请求的内容,看起来像回发参数。我不确定您正在使用哪个对象,但如果它是Request.Form,您可以从对象的HttpWebRequest方法检查请求流。

答案 1 :(得分:6)

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

答案 2 :(得分: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之间有效。

答案 3 :(得分:3)

HTTPHandler可以访问当前的HTTPContext。您可以使用它来检查一些属性(Request.RequestType,Request.URLReferrer)并手动确定它是否是PostBack。

答案 4 :(得分:1)

您可以获得对当前页面的引用:Get current System.Web.UI.Page from HttpContext?

然后你可以检查Page.IsPostBack属性。

答案 5 :(得分:0)

就像@ThatSteveGuy的答案一样,HTTPHandler将有权访问当前页面,您可以检查请求类型。

注意HTTPHandler上下文仅在Global.asax.cs的Application_PreRequestHandlerExecute中可用。以下是可以在Global.asax.cs中使用的代码示例。

    void Application_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        if (HttpContext.Current.Request.RequestType.Equals("POST"))
        {
            //Your code can go here.
        }
    }