0

C# で REST Web サービスを作成しました。Get リクエストは正常に機能しますが、挿入、更新、および削除は機能しません。Android タブレット (クライアント) から REST サービスを介して mySQL データベースにいくつかの値を挿入しようとすると、次のエラーが発生します: メソッドは許可されていません

Android クライアントから Web サービスに JSON 文字列を送信します。

Android 開発者ツール (日食) で:

String url = IP + PORT +"/RESTService/insert/";
            HttpClient client = new DefaultHttpClient();
            HttpResponse response;
            JSONObject json = new JSONObject();

                HttpPost post = new HttpPost(url);
                json.put("userName", name);
                json.put("userPassword", password);

                StringEntity se = new StringEntity(json.toString());
                se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"));
                post.setEntity(se);
                response = client.execute(post);

C#: サービス インターフェイス:

[OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "/insert/{jsonObj}", 
        RequestFormat = WebMessageFormat.Json,       
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare)]
    void InsertUser(string jsonObj);

サービス方法:

 public void InsertUser(string jsonObj)
    {
        string name = null;
        string password = null;
        DataContractJsonSerializer obj = new DataContractJsonSerializer(typeof(User));
        dynamic dynObj = JsonConvert.DeserializeObject(jsonObj);

        foreach (var data in dynObj.userObject)
        {
            name = data.userName;
            password = data.userPassword;
        }

       string sql = "INSERT INTO user (userName, userPassword) VALUES('" + name + "', '" + password +"';)";

       if (conn.State == ConnectionState.Closed)
       {
           conn.Open();
       }

       command = new MySqlCommand(sql, conn);
       command.ExecuteNonQuery();
       conn.Close();
       command.Dispose();
    }

私のユーザー:

    namespace RESTService
{
    [DataContract]
    public class User
    {
        [DataMember]
        public string userName { get; set; }
        [DataMember]
        public string userPassword { get; set; }

        public User(string name, string password)
        {
            this.userName = name;
            this.userPassword = password;
        }
    }

Web サービスを開始し、Android アプリを介して値を挿入しようとしても、何も起こりません。アプリからの値がWebサービスに届かないと思います。しかし、私には理由がわかりません。誰かが私を助けることができれば、それは素晴らしいことです:)。

前もって感謝します

4

1 に答える 1

0

最初のステップは、Web サービスを介して InsertUser メソッドを実行する C# 単体テストを作成することです。このテストを実行すると、UriTemplate が正しくないことがわかると思います。POST を作成している場合、json オブジェクトは URL ではなくリクエストの本文に含まれます。次のような属性を試してみます。

[WebInvoke(Method = "POST", UriTemplate = "/users", 
    RequestFormat = WebMessageFormat.Json,       
    ResponseFormat = WebMessageFormat.Json]

Android の URL は次のようになります (と思います)。

String url = IP + PORT + "/users";

チェックアウトするもう1つのことは、Fiddlerです。単体テストに合格したら、成功したリクエストを検査できます。Fiddlerを使用するようにAndroid クライアントを構成することもできます

于 2013-09-18T12:53:22.973 に答える