WCFサービスで、JSONオブジェクト を POST で渡す方法を記載します。
WCFサービスで RESTful なサービスを作成しようとすると、JSON を POST したいケースが出てきます。 ここでは、POST された JSONオブジェクト を受け取れるサービスの実装例を記載します。 POST 以外の PUT、DELETE なども、 Method を変更することで実装ができます。 また、どのようなリクエストを行うかも合わせて記載します。
サンプルコード
データコントラクト
サーバーとクライアントでデータをやり取りする際の取り決めごとを定義します。
定義の仕方は DataContract 属性
を指定することで定義します。
プロパティの指定には DataMember 属性
、IgnoreDataMember 属性
で指定します。
namespace WcfService { using System.Runtime.Serialization; [DataContract] public class Book { [DataMember(Name = "title")] public string Title { get; set; } [DataMember(Name = "author")] public string Author { get; set; } [DataMember(Name = "isbn")] public string ISBN { get; set; } [DataMember(Name = "publisher")] public string Publisher { get; set; } } }
インターフェース
POST、PUT、DELETE 等 GET 以外のメソッドを利用する場合、WebInvoke 属性
を指定します。
UriTemplage プロパティ
では、グローバルアプリケーションクラス で指定される ルートプレフィックス 以降の URI を定義します。
先頭のバックスラッシュ("/")はあってもなくても同じみたいです。
namespace WcfService { using System.ServiceModel; using System.ServiceModel.Web; [ServiceContract] public interface IService1 { [OperationContract] [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/Add")] void AddBook(Book book); } }
リクエスト
リクエストの中身が JSON なので、Content-Type: application-json
を指定してリクエストします。
POST http://localhost:8000/Service/Add HTTP/1.1 User-Agent: Fiddler Host: localhost:8000 Content-Type: application/json Content-Length: 86 {"title":"○×△", "author":"garafu", "publisher":"contso.com", "isbn":"1234567890"}
関連記事
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!