web-dev-qa-db-ja.com

WCFRestfulサービスGET / POST

このようなことはできますか?

[OperationContract]    
[WebInvoke
  (  
    Method = "POST",
    ResponseFormat = WebMessageFormat.Json,
    RequestFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "/abc{integerParam}"
  )
]
ResultStruct abc( int integerParam, CustomClass secondParam );

ここでのアイデアは、URLで最初のパラメーター(整数)を渡すことができるということですが、secondParamはPOSTから取得されます。これも可能ですか?

私はWCF RESTから始めましたが、パラメーターの割り当て方法がわかりません。ポインターがあれば役に立ちます。ありがとうございます。

8
ASR

はい、できます。ここからは RESTful Webサービスの設計と構築のガイド

[ServiceContract]
public partial class BookmarkService
{
    [WebInvoke(Method = "PUT", UriTemplate = "users/{username}")]
    [OperationContract]
    void PutUserAccount(string username, User user) {...}

    [WebInvoke(Method = "DELETE", UriTemplate = "users/{username}")]
    [OperationContract]
    void DeleteUserAccount(string username) {...}

    [WebInvoke(Method = "POST", UriTemplate = "users/{username}/bookmarks")]
    [OperationContract]
    void PostBookmark(string username, Bookmark newValue) {...}

    [WebInvoke(Method = "PUT", UriTemplate = "users/{username}/bookmarks/{id")]
    [OperationContract]
    void PutBookmark(string username, string id, Bookmark bm) {...}

    [WebInvoke(Method = "DELETE", UriTemplate = "users/{username}/bookmarks/{id}")]
    [OperationContract]
    void DeleteBookmark(string username, string id) {...}
    ...
}

私の場合、このようなRESTfulWebサービスの設計はひどいものです。このServiceContrcatは次のとおりです。

  • 保守不能、脆弱なリモートインターフェイス
  • あまりにも多くのメソッドを作成する必要があります
  • 多型は存在しません

リモートインターフェイスは安定および柔軟である必要があると思います。 Webサービスを設計するためにメッセージベースのアプローチを使用します。

詳細な説明はここにあります: WCFを使用したRESTfulメッセージベースのWebサービスの構築 、コードサンプルはここにあります: Nelibur およびNelibur nugetパッケージ ここ

22
GSerjo