0

Appcelerator Cloud Serviceに接続するC#アプリケーションで作業していますが、これまでクエリを実行してログインできましたが、更新しようとするとCustom Object次のエラーが発生しましたThe remote server returned an error: (401) Unauthorized。これは私のPOSTリクエストのコードです:

           url = "https://api.cloud.appcelerator.com/v1/objects/Reservacion/update.json?key=appkey&id=" + idReservacion + "&noDisponibles=" + noDisponibles;
            wrGetUrl = (HttpWebRequest)WebRequest.Create(url);
            wrGetUrl.Method = "POST";
            wrGetUrl.ContentType = "application/json";
            objStream = wrGetUrl.GetResponse().GetResponseStream(); // this is the line where the error is thrown
            reader = new StreamReader(objStream);

私には理論があり、ログインが含まれます。アプリケーションの開始時に、okステータスを返すログインを行いますが、セッションIDなどを送信して、すでにログインしているACSを何らかの方法で通知する必要があると思います。を更新しようとしていCustom Objectます。

編集それが私が次のようにヘッダーにクッキーを追加しようとした理由です:

                url = "https://api.cloud.appcelerator.com/v1/objects/Reservacion/update.json?key=appkey&id=" + idReservacion + "&noDisponibles=" + noDisponibles;
                wrGetUrl = (HttpWebRequest)WebRequest.Create(url);
                wrGetUrl.Method = "POST";
                wrGetUrl.ContentType = "application/json";
                wrGetUrl.Headers.Add("Set-Cookie", "_session_id=" + session + "; path=/; HttpOnly");
                objStream = wrGetUrl.GetResponse().GetResponseStream(); // this is the line where the error is thrown
                reader = new StreamReader(objStream);

session成功したログインから取得したセッションIDはどこにありますか。しかし、これをリクエストのヘッダーに追加したにもかかわらず、エラーが発生しましThe remote server returned an error: (401) Unauthorizedた。

編集: 私は何か他のものを試しました:

                url = "https://api.cloud.appcelerator.com/v1/objects/Reservacion/update.json?key=appkey&id=" + idReservacion + "&noDisponibles=" + noDisponibles;
                wrGetUrl = (HttpWebRequest)WebRequest.Create(url);
                wrGetUrl.Method = "POST";
                wrGetUrl.ContentType = "application/json";
                wrGetUrl.Headers.Add("Cookie", session); //changed the header but it didn't work
                objStream = wrGetUrl.GetResponse().GetResponseStream(); // still throws the same error
                reader = new StreamReader(objStream);

どうすればこの問題を解決できますか?よろしくお願いします。

4

1 に答える 1

0

私はこのような問題を解決しました:

                String fields = "fields={\"noDisponibles\":" + noDisponibles +"}";

                String url = "https://api.cloud.appcelerator.com/v1/objects/Reservacion/update.json?key=appkey&id=" + idReservacion + "&_session_id="+session; 
                HttpWebRequest wrGetUrl = (HttpWebRequest)WebRequest.Create(url);

                wrGetUrl.Method = "PUT";
                wrGetUrl.ContentLength = fields.Length;
                wrGetUrl.ContentType = "application/x-www-form-urlencoded";

                Stream dataStream = wrGetUrl.GetRequestStream();
                byte[] byteArray = Encoding.ASCII.GetBytes(fields);
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();


                Stream objStream = wrGetUrl.GetResponse().GetResponseStream();
                StreamReader reader = new StreamReader(objStream);

更新したいフィールドを送信するには、HttpWebRequestのDataStreamに書き込む必要がありました。これが将来人々に役立つことを願っています。

于 2012-08-23T23:15:03.533 に答える