8

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

[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 から始めましたが、パラメーターがどのように割り当てられているかわかりません。任意のポインタが役立ちますありがとう

4

1 に答える 1

24

はい、できます。これは、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) {...}
    ...
}

私にとっては、この種の RESTful Web サービスの設計はひどいものです。この ServiceContrcat は次のとおりです。

  • 保守不可能で脆弱なリモート インターフェイス
  • あまりにも多くのメソッドを作成する必要があります
  • ポリモーフィズムがない

リモート インターフェイスは安定していて柔軟であるべきだと私は信じています。メッセージ ベースのアプローチを使用して Web サービスを設計できます。

ここで詳細な説明を見つけることができます: Building RESTful Message Based Web Services with WCF、コード サンプルはこちら: Neliburおよび Nelibur nuget パッケージはこちら

于 2012-07-30T18:49:46.793 に答える