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 の フォロー」 お願いします!!