【问题标题】:Using session state in http handler在 http 处理程序中使用会话状态
【发布时间】:2013-09-16 13:42:56
【问题描述】:

我有一个需要访问会话状态的 HTTP 处理程序。在阅读了一些关于 SO 的其他问题后,我发现我需要将 IReadOnlySessionState 添加到我的处理程序中才能获得会话状态。我这样做了,现在我可以在我的IHttpHandler.ProcessRequest() 中看到context.Session 有一个值。

这很好,但问题是现在context.Request.HttpMethod 始终是GET。如果我删除 IReadOnlySessionState,context.Request.HttpMethod 是 POST,这是我所期望的。所以不知何故添加IReadOnlySessionState 导致它把我的HttpMethod 更改为GET,我不知道为什么。

我的代码如下所示:

public class MyHttpHandler : IHttpHandler, IReadOnlySessionState
{
    bool IHttpHandler.IsReusable
    {
        get { return true; }
    }

    void IHttpHandler.ProcessRequest(HttpContext context)
    {
        try
        {
            switch (context.Request.HttpMethod)
            {
                case "GET":
                    HandleGet(context);
                    break;
                case "POST":
                    HandlePost(context);
                    break;
                case "PUT":
                    HandlePut(context);
                    break;
                case "DELETE":
                    HandleDelete(context);
                    break;
                default:
                    break;
            }
        }
        catch (Exception ex)
        {
            // Do something useful here
        }
    }
}

我在 C++ 中使用 WinHttp 调用处理程序:

HINTERNET hRequest = WinHttpOpenRequest(hConnection, _T("POST"), webServicePath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_REFRESH);

BOOL rc = WinHttpSendRequest(hRequest, _T("Content-Type: application/x-www-form-urlencoded"), -1, (LPVOID)content, reqLen, reqLen, NULL);

将“POST”作为方法传递给WinHttpOpenRequest(),然后用WinHttpSendRequest()发送请求

【问题讨论】:

    标签: asp.net session session-state ihttphandler


    【解决方案1】:

    IRequireSessionState 可以处理 POST 请求,如下所示:

    public class MyHttpHandler : IHttpHandler, IRequireSessionState
    

    阅读IRequiresSessionState Interface 获取文档。

    【讨论】:

    • 我尝试使用 IRequiresSessionState 而不是 IReadOnlySessionState,但结果是一样的...
    • +1 为您提供帮助。我把它修好了,但我不知道为什么会这样。如果您能解释一下,请参阅我的答案...
    【解决方案2】:

    我已修复它,但如果有人可以提供帮助,我仍然希望得到解释 - 我的 web.config 中有 <sessionState cookieless="true"/>。当我将其更改为 false 时,我的请求以 POST 的形式通过。谁能解释一下原因?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多