1

と一致しないのはなぜ...私はこのAPIメソッドを持っている:私のAPIは、私は奇妙な状況を持って正しいルートに

[Route("api/something")] 
public class MyController : Controller 
{ 
    [HttpGet("test-{id}")] 
    public Task<T> method1() { ... } 

    [HttpGet("test-something-{id}")] 
    public Task<T> method2() { ... } 
} 

私はapi/something/test-something-1を呼びたいが、私のAPIはapi/something/test-1

理由を呼び出しますか?

+1

読む[尋ねる]と[MCVE]提供。このコードはあまりにも間違っています。回答を確認できるマシンの背後にいない場合は、質問を投稿しないでください。できるだけお待ちください。 – CodeCaster

答えて

-2

クラスの宣言では、属性のルーティングを有効にする必要があり、ルートの設定ファイルで

[RoutePrifix("api/something")] 
public Class blabla : Controller 
{ 
    [HttpGet("test-{id}")] 
    public Task<T> method1{} 

    [HttpGet("test-something-{id}")] 
    public Task<T> method1{} 
} 

間違っています。テンプレートパラメータがid = something-1として終わるでしょう

routes.MapMvcAttributeRoutes(); 
+0

クラス宣言が良いです、私はクラスを書いたときに急いでいました:D – Alex

+0

タイプミス( 'class'、' RoutePrefix'ではなく 'RoutePrefix'ではありません)とは別に、これは質問に答えません。 – CodeCaster

2

ルート"test-{id}"試合api/something/test-something-1。あなたは、このようなルートの競合、あなたがより良いルートを区別するために、ルートの制約を使用する必要がありますが存在する場合、それは、ルートテンプレートtest-{id}

method1を呼び出すことapi/something/test-something-1を呼ぶ理由です

[Route("api/something")] 
public class MyController : Controller { 
    [HttpGet("test-{id:int}")]//Matches GET api/something/test-1 
    public Task<IActionResult> method1(int id) { 
     //... 
    } 

    [HttpGet("test-something-{id}")]//Matches GET api/something/test-something-any_id_here 
    public Task<IActionResult> method2(string id) { 
     //... 
    } 
} 

idも同様intすると仮定されている場合は、同様に二番目にルート制約条件を適用することができます。

[HttpGet("test-something-{id:int}")]//Matches GET api/something/test-something-1 
public Task<IActionResult> method2(int id) { 
    //... 
} 

参考:Routing in ASP.NET Core : Route Constraint Reference

関連する問題