我有一个需要访问会话状态的 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()