2017-08-09 8 views
-1

ログインに成功しましたが、ログイン後に他のメソッドを正常に呼び出せないようです。私は、呼び出しの間にHTTPセッションを維持する必要があることをオンラインで検索しましたが、私はそれをしてもまだ動作していません。あなたは下のサンプルコードを見て、他に何が欠けているか見てくださいできますか?ありがとう。ログイン後にHTTPセッションを維持する

のEndPointます。http:// "自分のドメイン" /アカウント/ログイン

方法:

パラメータGET:ユーザー名、パスワード

を、私は、ログイン後、以下のURLを要求するときに、正常呼び出すように見えることはできません

エンドポイント:のhttp:// "自分のドメイン"/API /ゲーム

Parmaters:成功したURL上記のどれも

public string MakeRequest(string parameters) 
    { 
     CookieContainer cookie = new CookieContainer(); 

     string URL = EndPoint + parameters; 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); 

     request.CookieContainer = cookie; 

     request.Method = Method.ToString(); 
     request.ContentLength = 0; 
     request.ContentType = ContentType; 

     if (!string.IsNullOrEmpty(PostData) && Method == HttpVerb.POST) 
     { 
      var encoding = new UTF8Encoding(); 
      var bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(PostData); 
      request.ContentLength = bytes.Length; 

      using (var writeStream = request.GetRequestStream()) 
      { 
       writeStream.Write(bytes, 0, bytes.Length); 
      } 
     } 

     using (var response = (HttpWebResponse)request.GetResponse()) 
     { 
      var responseValue = string.Empty; 

      if (response.StatusCode != HttpStatusCode.OK) 
      { 
       var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode); 
       throw new ApplicationException(message); 
      } 

      // grab the response 
      using (var responseStream = response.GetResponseStream()) 
      { 
       if (responseStream != null) 
        using (var reader = new StreamReader(responseStream)) 
        { 
         responseValue = reader.ReadToEnd(); 
        } 
      } 

      return responseValue; 
     } 
    } 
+0

「HTTPセッション」とはどういう意味ですか? – mason

+0

クライアントでHTTP経由でセッションを維持しようとしています。 – Phillip

+0

ウェブはステートレスなので、「HTTP経由でセッションを維持する」という意味は分かりません。 – mason

答えて

0

コールの間に同じCookieコンテナを保持する必要があります。

呼び出し側がコンテナを注入できるようにするためにあなたの方法を変更します。

var cookie = new CookieContainer(); 
MakeRequest(loginUrl, cookie); 
MakeRequest(urlThatRequiresSession, cookie); 

それとも、あなただけのインスタンス・レベルでスコープcookieの代わりに、ローカルの可能性:

public string MakeRequest(string parameters, CookieContainer cookie) 

そして、このようにそれを呼び出します。

+0

素晴らしい、ありがとう。私はコードを更新します。 – Phillip

+0

ほとんどのサーバーでは、クライアントPCからユーザーごとに1つの接続しか許可されません。サーバーはCookieを使用して接続数を決定します。だから、ジョンのように同じクッキーを使用していることを確認してください。 wiresharkやfiddlerのようなスニファを使用して、接続が実際に閉じている理由と発生しているエラーを特定するのに役立ちます。 – jdweng

+0

これは、なぜ私はすべてのリクエストに対して新しいクッキーを作成し続けるのかを説明するでしょう。ありがとう。 – Phillip

関連する問題