在 HttpModule 中访问 POST 请求上的会话ASP.NET WebForms

问题描述

我正在开发一个无 cookie 的 ASP.NET WebForms 应用程序,它需要接收 POST 请求并将请求正文存储到 Session 变量中。请求被发布到一个 ASPX 页面,我可以用 Postman 模拟。出于某种原因,我无法在页面背后的代码中处理这个问题。

为了检索请求正文,我在 HttpModule 的 Application_EndRequest 处理程序中放入了一些代码,它可以正常工作:

public sealed class MyModule : IHttpModule
{
    public void Init(HttpApplication application)
    {
        application.EndRequest += new EventHandler(Application_EndRequest);
    }

    private void Application_EndRequest(Object source,EventArgs e)
    {
        var req = HttpContext.Current.Request;

        if (req.UrlReferrer == null && 
            req.Url.ToString() == MyEndPoint &&
            req.RequestType.toupper() == "POST")
        {
            using (var reader = new StreamReader(req.InputStream,Encoding.UTF8,true,1024,true))
            {
                //here I get the body of the POST request
                var requestBody = reader.ReadToEnd();
                //but HttpContext.Current.Session is null
            }
        }
    }

    public void dispose() {}
}

但是,当使用 HttpContext.Current.Session 时,会话在该阶段不可用。有什么办法可以访问吗?

我发现有些人改用 PostRequestHandlerExecute 事件。但是,此处理程序似乎并未命中 POST 请求,而是命中 POST 请求正文不再可用的后续 GET 请求。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...