2012-08-08 2 views
13

:웹 API의 모델 ASP.NET 웹 API 노선을 감안할 때

다음 ApiController 액션 메소드에 매핑
example/{Id} 

:

public void Example(Model m) 
{ 
    ... 
} 

모델 클래스와 같이 정의 :

public class Model 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

/example/123에 JSON { "Name": "Testing" }을 게시하면 Id 01 속성개체가 바인딩되지 않습니다. 123 대신 0으로 유지됩니다.

모델 바인딩에 경로 데이터의 값도 포함시킬 수 있습니까? 일반적인 사용 사례처럼 보이는 사용자 정의 모델 바인더를 작성하지 않아도됩니다. 어떤 아이디어라도 대단히 감사하겠습니다. 감사!

답변

0
- http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

는 또한 "ASP.NET 웹 API와 기록을 삽입"에이 링크를 확인 :이 페이지 아래

체크 아웃 테이블 절반 방법 (웹 API를하지만 그들은 일반적으로 /api/{controller} 사용)

기본 바인더가 Id 경로 값을 모델 ID 등록 정보와 연결할 수 있다고 생각하지 않습니다. 따라서 d1k_is 응답이 만족스럽지 않더라도 두려운 것 같습니다. 직접 바인더를 작성하거나 직접 바인더를 작성하는 경우 (DomainEntity 수퍼 클래스 또는 비슷한 것을 가지고 있다면 더 일반적인 바인더를 작성할 수 있습니다 ...)

10

찾고자하는 것을 달성하는 가장 쉬운 방법은 메소드에 다른 매개 변수를 추가하고 요청의 어느 부분에서 오는 매개 변수를 지정하는 것입니다.

예 :

[HttpPost] 
public void Example([FromUri]int id, [FromBody]Model m) { 
    // ... 
} 

지금 /examples/{id}의 경로가 성공적으로 결합 할 수있을 것입니다 - Example 메소드가이 URI에서 찾고있다 id라는 매개 변수를 가지고 있기 때문이다. 모델을 채우려면, 당신은뿐만 아니라 거기에 ID를 전달하거나 다음과 같은 일을 할 수 있습니다 : 당신이 위에서 언급 한 바와 같이
[HttpPost] 
public void Example([FromUri]int id, [FromBody]Model m) { 
    m.Id = id; // Make sure the model gets the ID as well. 
} 

그런 다음 단순히 /example/123{ "Name": "Testing" }에 게시 할 수 있습니다.