在http处理程序中使用会话状态

时间:2013-09-16 13:42:57

标签: asp.net session session-state ihttphandler

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

这很好,但现在问题context.Request.HttpMethod始终是GET。如果我删除IReadOnlySessionState,context.Request.HttpMethodPOST,这是我所期望的。因此,以某种方式添加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()

发送请求

2 个答案:

答案 0 :(得分:2)

IRequireSessionState将与POST请求一起使用,如下所示:

public class MyHttpHandler : IHttpHandler, IRequireSessionState

阅读IRequiresSessionState Interface了解文档。

答案 1 :(得分:1)

我修好了,但是如果有人可以提供帮助,我仍然会想要一个解释 - 我<sessionState cookieless="true"/>中有web.config。当我将其更改为false时,我的请求作为POST发出。任何人都可以解释原因吗?