2

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

4

2 に答える 2

2

IRequireSessionState次のように、POST リクエストで動作します。

public class MyHttpHandler : IHttpHandler, IRequireSessionState

ドキュメントについては、 IRequiresSessionStateインターフェイスを参照してください。

于 2013-09-16T13:46:41.843 に答える
1

私はそれを修正しましたが、誰かが助けてくれるなら説明が欲しいです - 私<sessionState cookieless="true"/>web.config. それを に変更するとfalse、リクエストが POST として届きました。誰でも理由を説明できますか?

于 2013-09-16T15:04:19.607 に答える