3

나는 동영상 컨트롤러가 있고 그 안에 다음과 같은 2 가지 방법이 있습니다 :웹 API 라우팅 문제

[Route("api/Video/{id:int}")]  
public Video GetVideoByID(int id){ do something}  

[Route("api/Video/{id}")]  
public Video GetVideoByTitle(string id) {do something} 

WebApiConfig.cs은 다음과 같다 : 그래서,

public const string DEFAULT_ROUTE_NAME = "MyDefaultRoute"; 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: DEFAULT_ROUTE_NAME, 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

    } 
} 

때 어떤 메소드를 주석 처리하고, 다른 메소드는 첫 번째 메소드를 완전히 주석 처리하고 두 번째 메소드는 작동하지만 두 메소드가 모두 구현되면 작동하지 않는 것처럼 작동합니다. 비어있는 웹 API 템플릿을 사용했습니다.

왜 이런 일이 발생했는지에 대한 생각은 훌륭합니다. 그래서 당신은 api/Video/GetVideoByTitle/x 또는 api/Video/GetVideoByID/x

You may want to read this, under Routing Variations > Routing by Action Name

+0

당신이 GetVideoByTitle에서 "ID_STR"대신 "ID"와 같은 무언가를 시도하고 알려 할 수 있습니까? –

+0

이것은 매개 변수의 다른 이름으로 만 작동한다고 생각하지 않습니다. 매개 변수의 수를 변경해도 도움이되지 않습니다. 두 경로를 구별하는 경로를 변경하는 것은 불가능합니다. 어쩌면 ActionAttributes를 조사하여 하나를 다른 것으로 표시하십시오. – Schwarzie2478

+0

@ user3036757 사실상 하나의 '페이지'에 여러 개의 제출 버튼이 각각 다른 작업으로 진행되기를 원하십니까? –

답변

1
당신은 속성의 라우팅을 활성화해야 변경

구성 중에 MapHttpAttributeRoutes을 호출하십시오.

예 :

public static void Register(HttpConfiguration config) 
{ 
    // Web API routes 
    config.MapHttpAttributeRoutes(); 
    ... 
} 

나는 그것을 테스트하고 정확하게 나를 위해 일했습니다

http://localhostapi/Video/1 // goes for the first method 
http://localhostapi/Video/foo // goes for the second method 
4

같은 것을 호출 할 것입니다 귀하의 routeTemplate에서

routeTemplate: "api/{controller}/{id}", 

routeTemplate: "api/{controller}/{action}/{id}",