2013-09-16 142 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

更新了代码调用处理程序 –