2012-03-19 5 views
0

複数のパラメータを受け取っているメソッドがあります。属性を持つメソッドのシグネチャは次のようになります。WebAPIを使用するHttp Postが原因で「HttpOperationHandlerFactoryが入力パラメータを判別できません...」

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] 
public int AddUser(string firstName, string lastName, string emailaddress) { // actions here } 

しかし、私はこの方法を使用する場合、私は次の例外を取得:

をHttpOperationHandlerFactoryがあるべき入力 パラメータを決定することができませんサービス操作 '開始'のための要求メッセージ内容 に関連付けられています。操作が要求メッセージ内の コンテンツを期待しない場合は、 操作でHTTP GETメソッドを使用してください。それ以外の場合は、いずれか1つの入力パラメータを確認してください、それが「本当」または次のいずれかに割り当て あるタイプであるに設定 IsContentParameterプロパティですしていますのでHttpContent、ObjectContent`1、

、私が作成しました渡されるカスタムオブジェクト(例えば、以下のように)この新しい署名を使用して

[DataContract] 
public class UserToAdd { 
    [DataMember] public string firstName { get; set; } 
    [DataMember] public string lastName { get; set; } 
    [DataMember] public string emailAddress { get; set; } 
} 

:。私は404を取得し、それを行うとき

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] 
public int AddUser(UserToAdd user) { // actions here } 

それは私がワットできないようですに。助言がありますか?

+1

確かに、HttpOperationHandlerとWebInvokeはASP.NET Web APIではサポートされなくなっています。 OperationHandlerはActionFiltersに置き換えられ、WebInvokeはMVCルーティングに置き換えられます。 –

+0

それはおそらく私の問題です。すばらしいです。私は今、私は変換するだろうと思う。ありがとう! –

+0

注入用にプログラマチックにServiceRouteを作成している場合、私はもはやHttpServiceHostFactoryを使用しませんか? –

答えて

1

宣言的にルートを作成することができます。下位互換性の理由からサポートされなければならない、穏やかでないURIの束を継承していたので、これをやらなければなりませんでした。 URI、制約、HTTPメソッドを記述する独自の属性を作成しました。これは実質的にWebInvoke/WebGetの代わりとなります。私は起動時に私のサービスメソッドを見直してルートを発見し、必要に応じてMapHttpRoute()を呼び出します。私のルートのそれぞれはコントローラとアクションを明示的に指定します。このアプローチはRPCスタイルのAPIには適していますが、かなりの負荷がかかります。良い点は、メソッドでルートの定義を保持していることです。これは、Web APIが明示的に与えるものではありません。

RPCスタイルは可能ですが、それは慣用的ではありません。 Web APIは、RESTfulなAPIに向かって、サービスやメソッドへの経路のコンベンショナル・ドリブン・マッピングによって強く偏向されます。このようにして、非常に一般的なルートが登録され、慣例が残ります。これは、対応するアクションから離れたルートを定義するという問題を大幅に回避します。他にもフレームワークと少し戦っているので、私はWeb APIのRESTful/convention方式に変換できます。

+0

問題は、私の最終目標は、以前のMVC3-ishの方法でルーティングを処理しているOrchard CMSでRESTの規約を取得していることです。ルーティングを扱うための別のインターフェイスがあります。私は何かをしていると思うし、それがすぐに分かったら、私は返信します。 –

+0

オーチャードがルーティングとWebAPIプレビューを処理する方法には明らかに問題があるようです。誰が責任を負うべきかはっきりしません。 –

関連する問題