我有一个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()
答案 0 :(得分:2)
IRequireSessionState
将与POST请求一起使用,如下所示:
public class MyHttpHandler : IHttpHandler, IRequireSessionState
答案 1 :(得分:1)
我修好了,但是如果有人可以提供帮助,我仍然会想要一个解释 - 我<sessionState cookieless="true"/>
中有web.config
。当我将其更改为false
时,我的请求作为POST发出。任何人都可以解释原因吗?