2013-09-16 43 views
2

我有一個需要訪問會話狀態的HTTP處理程序。在閱讀了關於SO的其他一些問題之後,我發現我需要將IReadOnlySessionState添加到我的處理程序中才能獲得會話狀態。我這樣做了,現在我可以在我的IHttpHandler.ProcessRequest()中看到context.Session有一個值。在http處理程序中使用會話狀態

這很好,但現在的問題是context.Request.HttpMethod始終是GET。如果我刪除IReadOnlySessionState,context.Request.HttpMethodPOST,這是我所期望的。所以不知何故,加入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()

回答

1

我修好了,但如果有人可以幫忙,我還是喜歡解釋 - 我在web.config<sessionState cookieless="true"/>。當我將其更改爲false時,我的請求作爲POST發送。有人可以解釋爲什麼嗎?

+0

你找到了解釋?非常感謝這個答案!!!!! – Nizam

2

IRequireSessionState將與POST請求一起使用,如下所示:

public class MyHttpHandler : IHttpHandler, IRequireSessionState 

閱讀IRequiresSessionState Interface的文檔。

+0

我嘗試使用IRequiresSessionState而不是IReadOnlySessionState,但結果是一樣的... –

+0

@JeffLoughlin - 發佈調用您的處理程序的代碼。 –

+0

更新了代碼調用處理程序 –