【发布时间】:2013-09-16 13:42:56
【问题描述】:
我有一个需要访问会话状态的 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()发送请求
【问题讨论】:
标签: asp.net session session-state ihttphandler