我有一個需要訪問會話狀態的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