セッション状態へのアクセスを必要とする 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()