2013-04-30 9 views
4

이렇게하면 두통이 생깁니다.Asp.net 웹 API : 컨트롤러에서 아무런 작업도 찾을 수 없었습니다.

경로 :

  config.routes.MapHttpRoute(
      name: 'ControllerAction' , 
      routeTemplate: "api/{controller}/{action}" 
     ); 

컨트롤러 :

public class LookupsController : ApiControllerBase 
{ 
    [ActionName("all")] 
    public Lookups GetLookups() 
    { 
     var lookups = new Lookups 
     { 
      Customers = GetCustomers().ToList(), 
      //add more 
     }; 
     return lookups; 
    } 

} 

하지만 URI를 공격하려고 whenver :/API/조회가/모든 내가 말 404 오류가 발생합니다 :

" 컨트롤러 'Lookups'에서 이름 'all'과 일치하는 작업이 없습니다. "

어떤 도움을

편집을 감상 할 수있다 : 그래서 나는 마침내 그것을 알아 냈다. 그것은 잘못된 관계 때문이었습니다. VS2012는 action을 system.web.mvc.actionnameattribute에 자동 실행했습니다. 필요한 항목은 system.web.http.actionnameattribute입니다.

이상한 문제, 어쨌든, 나는 이것이 다른 누군가를 돕기를 바랍니다.

+0

@jakli, 그것은 나를 도왔습니다 :) 고마워요. – Chandermani

답변

1

야콥 리,

편집 : 당신은 컨트롤러의 이름을 변경하지만 방법을 지정하지

. WebApi는 접두사 GET, PUT, DELETE, POST에서 메서드를 확인합니다. 그래서 방법 속성이 작업의 서명에 배치해야합니다

이 시도, 나를 위해 잘 작동합니다 :

public class LookupsController : ApiControllerBase 
{ 
    [HttpGet()] 
    [ActionName("All")] 
    public Lookups GetLookups() 
    { 
     var lookups = new Lookups 
     { 
      Customers = GetCustomers().ToList(), 
      //add more 
     }; 
     return lookups; 
    } 

}

routes.MapHttpRoute(
name: "ActionApi", 
routeTemplate: "api/{controller}/{action}/{id}", 
defaults: new { id = RouteParameter.Optional } 

);

라우팅에 대한 자세한 내용은 여기를보세요 :

Routing in ASP.NET Web API

당신의 도움을 희망!

+0

그래서 나는 그런 식으로 시도해 보니 1 개의 인수를 취하는 생성자가 httpget에 포함되지 않았다. 하지만 팁 주셔서 고마워요. – jakli

+0

헤이 @ 자클리, 당신이 내 자신보다 나이가 많은 버전을 사용하고있는 것처럼 보입니다! 나는 posto를 다른 aproach로 바 꾸었습니다. 한 번보세요. 그것의 일은 나를 위해 여기에서 잘 작동한다! :) – Fals

관련 문제