2012-04-26 1 views
11

배경 :MVC4 Web API에서 [Bind (Prefix = "principalId")]와 동일합니까?

는 MVC3, 나는 정의 Action 매개 변수 이름을 지정하려면 다음 구문을 사용했습니다 :

다음과 같이이 작업에 대한 경로가 정의 된
public ActionResult ActionName([Bind(Prefix = "principalID")] int userID, 
           [Bind(Prefix = "dependentID")] long applicationID) 

(ActionNameConstraint 사용자 정의 IRouteConstraint입니다) :

routes.MapHttpRoute(
    "DependantAction", 
    "{controller}/{principalID}/{action}/{dependentID}", 
    new {controller = @"[^0-9]+", action = ActionNameConstraint.Instance, dependentID = RouteParameter.Optional} 
    ); 

질문 :

BindAttributeSystem.Web.Mvc 클래스입니다. Web Api에 이와 동일한 (매개 변수 바인딩)이 있습니까?

물론 같은 결과를 얻기위한 다른 해결책이 있다면, 나는 그것들을 듣고 싶습니다!

답변

-2

WebAPI에서는 특수 컨트롤러 클래스 기본 및 특수 동작 이름을 사용하지만 여전히 컨트롤러와 동작 만 알고있는 것으로 알고 있습니다.

시도해 보았습니까? 이 문서에서 얼핏 모델 (아니지만 특정 속성) 일반적으로 바인딩을 제안 할 것으로 보인다 정상적으로 작동합니다 :

http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

편집 :

일부는이 MVC와 함께 작동해야한다고 만 대답을 downvoted.

+0

필자는이 기사를 실제로 검토했지만 실제로는 동일한 의도에 맞지 않습니다.이 기사는 주로 모델 바인딩을 다루고 있습니다. 대부분의 검색 결과 실제로 모델 바인딩에 대한 결과가 나타났습니다. – diaho

+1

ASP.NET 웹 API는 그렇지 않습니다. 'BindAttribute' 기능이 내장되어 있습니다. 액션 매개 변수 바인딩은 웹 API의 모델 바인딩 및 포맷 기능을 수행합니다. 그래서, 그것은 단지 모델 바인더가 아닙니다. 또 다른 팁은 ASP.NET Web API와 함께 System.Web.Mvc 네임 스페이스에서 아무 것도 사용하지 않는 것입니다.99 %의 시간이 걸리면 문제가 생길 것입니다. – tugberk

+0

업데이트 된 답변을 확인하십시오. – Meligy

5

당신은 모델 바인딩에 사용되는 매개 변수 이름을 지정합니다 System.Web.Http.FromUriAttribute 속성을 사용할 수 있습니다.

public ActionResult ActionName(
        [FromUri(Name = "principalID.userID")] int userID, 
        [FromUri(Name= "dependentID.applicationID")] long applicationID 
        ) 

FromUri는 쿼리 문자열 및 요청에 대한 RouteData을 검토 바인딩 모델을 알려줍니다.

+1

불행히도이 방법은 포함에 대해서만 작동합니다. 제외 항목을 지정하려는 경우 직접 설정해야합니다. –

관련 문제