2012-11-27 4 views
3

에서 객체 전달 get 및 to date를 해당 날짜 사이에 항목을 검색하기 위해 내 MVC webapi로 가져와야합니다. 여기 내가 시도한 나의 가장 좋아하는 것은 일하지 않았다 (나는 여러 가지를 시도했다).MVC WebApi C#

다음
public IEnumerable<Appointment> GetAppointments(SchedulerDateSpan dates) 
{ 
    IEnumerable<Appointment> appointments = 
    db.Appointments.Where(
    a => 
    (a.StartDate <= dates.StartDate && a.EndDate >= dates.StartDate) || (a.StartDate <= dates.EndDate && a.EndDate >= dates.EndDate) || 
    (a.StartDate > dates.StartDate && a.EndDate < dates.EndDate)).AsEnumerable(); 
    return appointments; 
} 

날짜 유형의 SchedulerDateSpan이다 클라이언트에서 내 전화입니다 : 여기

public class SchedulerDateSpan 
{ 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
} 

는 GET 내 컨트롤러 클래스된다

나는 프로젝트간에 공유되는 객체가 :

var client = new HttpClient { BaseAddress = new Uri(Properties.Settings.Default.SchedulerWebApi) }; 

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

HttpResponseMessage resp = client.GetAsync(String.Format("api/Appointments/{0}",dates)).Result; 

if (resp.IsSuccessStatusCode) 
{ 
    var appointments = resp.Content.ReadAsAsync<IEnumerable<Appointment>>().Result; 
      ...... 
} 

나는 또한 작동하는듯한 풋으로 변경하려고 시도했지만 N 난 당신이 [FromUri] 속성으로 Get 메소드 매개 변수를 장식 할 필요가 다음 쿼리 문자열을 통해 복잡한 개체를 전달하려는 경우 어떤 제안이

답변

6

기본적으로 복잡한 유형 (예 : SchedulerDateSpan)은 요청 본문에 전달되어야합니다. ,

public IEnumerable<Appointment> GetAppointments([FromUri]SchedulerDateSpan dates) 
{...} 

그런 다음 열린 우리당에 쿼리 문자열에서 '날짜'를 전달할 수 있습니다 : 당신은 당신이 원하는 경우 [FromUri] 값이 URI에서 전달 될 수있는 행동의 매개 변수를 표시 변경해야 like :

HttpResponseMessage resp = client.GetAsync(
    String.Format("api/Appointments?dates.StartDate={0}&dates.EndDate={1}", 
    dates.StartDate.ToString(), 
    dates.EndDate.ToString())).Result; 
+0

챔피언처럼 일했습니다! 고맙습니다!! –

3

를 부탁드립니다 Content.ReadAsAsync

과 결과를 구문 분석 할 수 없습니다 :

public IEnumerable<Appointment> GetAppointments([FromUri] SchedulerDateSpan dates) 

귀하의 쿼리 문자열은 다음과 같이 보일 것입니다 :

http://server.com/api/Appointments?StartDate=blah1&EndDate=blah2 

행운을 빕니다!

+0

이것은 작동합니다. 고맙습니다. – Matt

관련 문제