2017-01-17 2 views
1
내가 여러 여기 HttpConfiguration.Routes.MapHttpRoute

문제는

을 활용하여 문제를 데

내가 무슨의 예입니다 사용자는 다른 옵션을 사용합니다. 예를 들어

:

사용자가 http://API/Items를 입력하면 - 그들은 모든 항목의 수익을 얻을 것입니다. 사용자가 입력하는 경우

http://API/Items/John/Resource1/PC001 - 그들은 machinename="PC001"

내가 매개 변수로 ([FromBody]string user, [FromBody]string resource, [FromBody]string machinename)를 사용하여 시도하지만 오류를 가지고, user="John", resource="Resource1"에 의해 필터링되는 모든 항목의 수익을 얻을 것 "여러 행동이 발견 된 일치하는 요청 "DefaultApi 및 AppResourceUserMachineNameApi 경로 사이에.

이러한 매핑을 활용하여 내가 원하는 것을 할 수있는 방법이 있습니까?

고마워요, 오스틴

답변

0

경로 순서를 변경하십시오. 더 일반적인 경로는 특정 경로보다 나중에 매핑해야합니다.

config.Routes.MapHttpRoute(
    name: "AppResourceUserMachineNameApi", 
    routeTemplate: "api/{controller}/{user}/{resource}/{machinename}" 
); 

config.Routes.MapHttpRoute(
    name: "AppResourceUserApi", 
    routeTemplate: "api/{controller}/{user}/{resource}" 
); 

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

첫 경기가 이기기 때문입니다. 매핑의 현재 순서로, URL http://API/Items/John/Resource1/PC001는 일치합니다

api/{controller}/{id} 

경우 {ID} = "존/리소스 1/PC001"

하지만 경험으로 다른 노선과 충돌합니다. 그러나 제안 된 순서대로,보다 구체적인 경로 인 api/{controller}/{user}/{resource}/{machinename}에 작업이 일치 할 때이를 사용할 것입니다.

다른 모든 당신이 또한

Attribute Routing in ASP.NET Web API 2

에 볼 수 있었다 실패하면, 그것은 [FromBody]을 사용하는 방법이 아니다. 액션에서 한 번만 사용할 수 있습니다.

소스 : Parameter Binding in ASP.NET Web API

대부분 하나의 매개 변수는 메시지 본문에서 읽을 수있다. 따라서 이 작동하지 않습니다 :

// Caution: Will not work!  
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }