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