更新
我正在实现自定义页面缓存解决方案,如果响应表单提交或某种asp.net回发,我不希望从缓存中缓存或检索请求。
我正在试图弄清楚当前的HttpRequest是否是一个回发。有没有办法在页面或其他用户控件的上下文之外执行此操作?换句话说,如果我在HttpModule中,我无权访问this.IsPostBack
,但我仍然需要确定它是否实际上是一个回发。
此外,回发总是“发布”请求还是由包含表单确定?
谢谢!
答案 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.PostMapRequestHandler
和HttpApplication.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.
}
}