Asp.net 如何确定请求是否是回发的结果?
更新 我正在实现一个自定义页面缓存解决方案,如果请求是响应表单提交或某种asp.net回发,我不希望请求被缓存或从缓存中检索 我试图弄清楚当前的HttpRequest是否是回发。有没有一种方法可以在页面或其他用户控件的上下文之外执行此操作?换句话说,如果我在HttpModule中,我无法访问Asp.net 如何确定请求是否是回发的结果?,asp.net,Asp.net,更新 我正在实现一个自定义页面缓存解决方案,如果请求是响应表单提交或某种asp.net回发,我不希望请求被缓存或从缓存中检索 我试图弄清楚当前的HttpRequest是否是回发。有没有一种方法可以在页面或其他用户控件的上下文之外执行此操作?换句话说,如果我在HttpModule中,我无法访问this.IsPostBack,但我仍然需要确定它是否实际上是回发 另外,回发总是“Post”请求,还是由包含表单决定的 谢谢 检查HttpWebRequest的方法属性。回发应在方法中标记为POST 此外,
this.IsPostBack
,但我仍然需要确定它是否实际上是回发
另外,回发总是“Post”请求,还是由包含表单决定的
谢谢 检查
HttpWebRequest
的方法
属性。回发应在方法中标记为POST
此外,在旧式asp中执行此操作的方法是检查HTTP消息体(Request.Form
)中预期的回发参数。您可以检查请求的内容,以获取类似于回发参数的数据。我不确定您使用的是什么对象,但如果它是一个HttpWebRequest
,您可以从对象的GetResponseStream()
方法中检查请求流。您可以获得对当前页面的引用:
if (Request.ServerVariables["REQUEST_METHOD"] == "POST") {
// This is a POST
}
然后可以检查Page.IsPostBack属性。HTTPHandler将有权访问当前HTTPContext。您可以使用它来检查一些属性(Request.RequestType、Request.urlReferer)并手动确定它是否是回发 以下静态例程应该能够确定当前请求是否为回发。但是,只有在执行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
可能尚未初始化,这取决于您尝试评估的请求生命周期的哪个阶段。我相信这个方法只在HttpApplication.PostMapRequestHandler
和HttpApplication.ReleaseRequestState
之间有效,比如@ThatSteveGuy的答案HTTPHandler将访问当前页面,您可以检查请求类型
注意:HTTPHandler上下文仅在Global.asax.cs中的应用程序_PreRequestHandlerExecute中可用。下面是您可以在Global.asax.cs中使用的代码示例
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
if (HttpContext.Current.Request.RequestType.Equals("POST"))
{
//Your code can go here.
}
}
请详细说明“页面或其他用户控件的上下文之外”这一点好吗?如果没有ASP.NET页面,则无法进行回发。否则,你就只有一个普通的HTTP帖子了。IsPostBack
对你来说到底意味着什么?例如,仅当数据传递到模块时。。。或者什么?Ben McCormack有更好的答案,但基本上是一样的。这是一个很好的发现,我正在投票,但对我来说仍然不起作用,因为我在处理程序与请求关联之前进入管道,因此HttpContext.Current.handler始终为null。在页面呈现的哪个步骤中,你需要知道页面是否回发?对于较小的启动:if(context.Request.HttpMethod!=“POST”)