0

私は次のような方法でwcfを持っています

Void finalize(string jsonstring);

そして、finalize/{json}のようなリクエストURLを使用します

しかし、これをjsonで呼び出すと、:などの文字の悪い要求の原因が発生します

それを修正する方法

これは私がメソッドに使用するコードです

        [WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
UriTemplate = "FinalBooking/{BookingJsonString}")]
        public int Finalize(string JsonString)
        {
            int result; // 1 success , 0 faill

            JavaScriptSerializer json_serializer = new JavaScriptSerializer();
            Routess routes =
                   (Routess)json_serializer.DeserializeObject(JsonString);
            using (XEntities context = new XEntities())
            {
                result = context.usp_Final(routes.TypeID, routes.regID, routes.CycleID, routes.DateTime,
                      routes.LocationID, routes.PatID, routes.PO, routes.BTID, routes.DID);



            }

            return result;

        }

    }

データの例は、次のような単純なJSON文字列です。

{"DateTime":"03/09/2012 09:00","CycleID":6,"BTID":31,"DiseaseID":814,"LocID":36,"PatID":13,"PO":1,"TypeID":744,"rID":-1}

よろしくお願いします

4

1 に答える 1

0

URL に追加するときに、JSON 文字列を URL エンコードしていますか? URL が C# から作成された場合は、HttpServerUtility.UrlEncode()のようなものを使用するか、javascript でescape()を使用します。

送信中の URL を表示していただけると助かります。URL が問題なのか、それとも WCF の問題なのかは明らかではありません。


編集:

投稿されたコードを見て、UriTemplate とメソッド パラメーター名が一致していないことに気付きました。

[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
UriTemplate = "FinalBooking/{BookingJsonString}")]
    public int Finalize(string JsonString)

BookingJsonStringJsonString

UriTemplate名前が一致するはずの「名前でバインド」と、名前を無視してパラメーターインデックスだけを使用する「位置でバインド」の 2 つのバインディングモードがあります。WCF WebInvoke が使用するモードに関する情報が見つからないようです。そのため、テンプレートまたはパラメーターの名前を一致するように変更してみてください。

于 2012-09-02T17:31:06.197 に答える