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

Mic*_*cah 7 asp.net

更新

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

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

回帖总是"发布"请求还是由包含表单决定?

谢谢!

Ben*_*ack 9

检查的Method属性HttpWebRequest.回发应标记为POSTMethod.

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


jes*_*vin 6

if (Request.ServerVariables["REQUEST_METHOD"] == "POST") {
    // This is a POST
}
Run Code Online (Sandbox Code Playgroud)


Rab*_*bid 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

还应注意,CurrentHandler可能尚未初始化,具体取决于您尝试评估的请求生命周期中的哪个阶段IsPagePostBack.我相信这种方法只会在HttpApplication.PostMapRequestHandler和之间有效HttpApplication.ReleaseRequestState.