我有一个需要访问会话状态的HTTP处理程序。在阅读了关于SO的其他一些问题之后,我发现我需要将IReadOnlySessionState
添加到我的处理程序中才能获得会话状态。我这样做了,现在我可以在我的IHttpHandler.ProcessRequest()
中看到context.Session
有一个值。在http处理程序中使用会话状态
这很好,但现在的问题是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
}
}
}
我调用使用WINHTTP C++中的处理程序:
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()
你找到了解释?非常感谢这个答案!!!!! – Nizam