2016-07-05 6 views
2

これはなぜ機能しませんか?私はエラーが発生します:System.InvalidOperationException:URLに一致する複数のコントローラタイプが見つかりました。これは、複数のコントローラの属性ルートが要求されたURLと一致する場合に発生します。複数のコントローラタイプがc#web api 2.0でエラーが見つかりました

public class ConfigUpdateController: ApiController 
{ 
    [HttpPut] 
    [Route("api/device/{serial}/config")] 
    public IHttpActionResult Update(
     [FromUri] string serial, 
     [FromBody] Configuration configuration) 
    { 

    } 
} 

public class ConfigQueryController: ApiController 
{ 
    [HttpGet] 
    [Route("api/device/{serial}/config")] 
    public IHttpActionResult Get(
     [FromUri] string serial) 
    { 

    } 
} 

別のコントローラで同じリソースのメソッドを使用する理由は、コマンドをコマンドから切り離すためです。

EDIT

正直に言うと、それはそうコメントコントローラは電気ショック療法命名気にしないでください、私の問題を説明するために十分なコードです。私の質問の文脈では重要ではありません。だから、コントローラが解決し、法動詞(PUT、GETすることができないので、これは動作しません

Routing has three main phases: Matching the URI to a route template. Selecting a controller. Selecting an action.

ようだ:私はweb-api overview thetルーティングが3つの段階があり、ここで見つけた

EDIT 2

)もチェックされていない? O_o

+1

方法が問題を引き起こしている同じシグネチャと同一の経路を有します。メソッドのシグネチャまたはルートを変更します。また、コントローラの適切な名前付けを使用することに害を及ぼすこともありません。 – hbulens

+0

あなたのルートがコントローラ – brykneval

+0

に基づいていないASP.NET MVCでは、同じ名前の2つのアクションを持つことができますが、同じシグネチャではできません。この回答をご覧くださいhttp://stackoverflow.com/questions/9552761/同一のアクション名を持つコントローラの取得とポストメソッド – user65439

答えて

0

エラーを注意深く読んで、属性ルーティングを見てください。 2つの異なるアクションに対して同じURLがあります。 プログラムは実行するアクションを知らないでしょう。

+2

彼らはそうではありません。 1つはGETと2番目のPUTです。ルータはそのような明白な違いを区別する必要があります、あなたは思いませんか? – Pujubuju

0

使用[FromRoute]の代わりに[FromUri]の注釈

関連する問題