2

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

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

我的代码看起来像这样:

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()

4

2 回答 2

2

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

public class MyHttpHandler : IHttpHandler, IRequireSessionState

阅读IRequiresSessionState 接口以获取文档。

于 2013-09-16T13:46:41.843 回答
1

我修复了它,但如果有人可以提供帮助,我仍然想要一个解释 - 我<sessionState cookieless="true"/>在我的web.config. 当我将其更改为 时false,我的请求以 POST 的形式出现。谁能解释为什么?

于 2013-09-16T15:04:19.607 回答