3

だから私は次のサービスを持っています:

public interface IService1
{
    [OperationContract, WebGet(UriTemplate = "/getStuff?stuff={stuff}", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
    List<Row> getdTable(string stuff);
    [OperationContract, WebInvoke(UriTemplate = "/log", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, Method = "POST")]
    void insertLog(Log[] log);
    [OperationContract, WebInvoke(UriTemplate = "/testPost", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, Method = "POST")]
    void testPost(TwoStrings testPost);
}

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]


[DataContract]
public class TwoStrings
{
    [DataMember]
    public string one { get; set; }
    [DataMember]
    public string two { get; set; }
}

WebGet は魅力的に機能しますが、webinvoke メソッドを実際に機能させることはできません。次のPOSTを使用して、現在フィドラーを使用してテストしています:

POST http://localhost:50051/Service1.svc/testPost HTTP/1.1  
Host: localhost:50051  
User-Agent: Fiddler   
Content-Type: application/json; charset=utf-8  
Content-Length: 25  
{"testPost":{"one":"test1","two":"test2"}}

そして、私が返す応答は次のとおりです。

 HTTP/1.1 400 Bad Request

ここで途方に暮れています.JSON本体でいくつかの異なる形式を試しましたが、役に立ちませんでした. JSON は適切にフォーマットされていますか? POST を実行するために必要な構成はありますか?

編集:解決策が見つかりました、私は馬鹿です。適切なボディ ラッピングを反映するようにフィドラー リクエストを最後に修正したときに、ボディ サイズを 25 から正しい 38 に変更するのを忘れていました。迅速な対応に感謝します。

4

0 に答える 0