2012-05-31 2 views
7

새로운 asp.net 웹 API를 사용하고 선택적 매개 변수를 전달하려면 원하는 매개 변수를 전달할 수 있도록 특성을 채워야한다고 생각하십니까? 상징.asp.net webapi : 선택적 매개 변수를 전달하는 방법?

이 작업이 완료되기 전에 나는 uri 템플릿을 가지고 있다고 생각합니다.

누구든지 도움을 주거나 도움을 주실 수 있습니까?

나는 현재 내가

을 거라고 int로서 내 컨트롤러에 도착 URL의 ID를 전달하고하지만 일부 날짜

를 전달해야 당신은 nullable 형식을 사용하여 매개 변수는 선택 할 수
+0

시나리오를 조금 더 명확히 할 수 있습니까? 어떤 액션 메소드 서명을 기대합니까? 라우팅 변경 사항은 무엇입니까? 웹 API 라우팅 기본에 대한 몇 가지 정보는 다음에서 볼 수 있습니다. http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api – marcind

답변

6

: 올바른 이안에 의해 제공 이전의 대답에 추가

public class OptionalParamsController : ApiController 
{ 
    // GET /api/optionalparams?id=5&optionalDateTime=2012-05-31 
    public string Get(int id, DateTime? optionalDateTime) 
    { 
     return optionalDateTime.HasValue ? optionalDateTime.Value.ToLongDateString() : "No dateTime provided"; 
    } 
} 
+0

Thanks Ian, 잘 했어. – Martin

3

, 당신은 내가 뭔가 통과 여부되었는지 여부를 확인하는 것을 피한다 깨끗한 옵션 느낌 기본값을 제공 할 수 있습니다. 또 다른 옵션.

public class OptionalParamsController : ApiController 
{ 
    // GET /api/optionalparams?id=5&optionalDateTime=2012-05-31 
    public string Get(int id, DateTime optionalDateTime = DateTime.UtcNow.Date) 
    {...} 
} 
+3

선택적 매개 변수는 컴파일시 상수 여야하며 DateTime은 컴파일시 상수가 아니어야합니다. – frapontillo

+0

아, 네 말이 맞아. datetime은 선택적 매개 변수로 제공 될 수 없으며이를 예제로 사용해서는 안됩니다. 그러나이 방법으로 다른 데이터 유형을 사용할 수 있습니다. – AlexGad

+0

현재 프로젝트에서 기본값을 제공하지 않으면 경로가 확인되지 않고 404 (찾을 수 없음) HTTP 오류가 반환됩니다. 메소드 서명은'void MyAction (long id, long? value1 = -1, long? value2 = -1)'이어야합니다. 디폴트 값을 제공하지 않으면 쿼리 문자열에 전달되지 않으면 실패합니다! – Loudenvier