2017-01-05 10 views
1

私のコントローラには2つのアクションメソッドがあります。以下はコントローラ 'User'に 'Name'という名前と一致するアクションが見つかりませんでした

[RoutePrefix("user")] 
public class UserController: ApiController 
{ 
    [HttpGet] 
    public IEnumerable<User> Get() 
    { 
     return new User.GetUsers(); 
    } 

    [Route("{name}")] 
    [HttpGet] 
    public IEnumerable<User> GetByName(string name) 
    { 
     return new User.GetUsers(name); 
    } 
} 

私のルートの設定ファイルである

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "{controller}/{action}/{id}", 
    defaults: new { controller = "user", id = RouteParameter.Optional } 
    ); 
config.Routes.MapHttpRoute(
    name: "DefaultApiGet", 
    routeTemplate: "{controller}/{id}", 
    defaults: new { action = "Get", id= RouteParameter.Optional }, 
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) } 
    ); 

私はAPIで何が間違っていることを確認していない以下の

localhost/User - - Working 
localhost/User/Jane -- Not working throwing error. 

を呼び出しています。

+1

で大会をベースと属性のルートを混在しないようにしてくださいあなたは、ルーティング属性を有効にする必要が '私は、このような愚かなことを見逃したのかわからない規則ベースのルーティング – Nkosi

答えて

1

あなたは規則ベースのルーティング前に

config.MapHttpAttributeRoutes()をルーティング属性を有効にしても、コントローラを更新する必要があります。同じコントローラ

[RoutePrefix("user")] 
public class UserController: ApiController 
{ 
    //GET user 
    [Route("")] 
    [HttpGet] 
    public IEnumerable<User> Get() { ... } 

    //GET user/Jane 
    [Route("{name}")] 
    [HttpGet] 
    public IEnumerable<User> GetByName(string name) { ... } 
} 
+0

前config.MapHttpAttributeRoutes'。ありがとうございました.. –

関連する問題