2017-01-05 2 views
1

컨트롤러에 두 가지 동작 방법이 있습니다.'이름'과 일치하는 컨트롤러 '사용자'에 대한 작업이 없습니다.

[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); 
    } 
} 

다음은 내가 API에 어떤 문제가 있는지 확실하지 오전 내 경로 설정 파일

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) } 
    ); 

나는

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'. 고맙습니다.. –