3

これらの日付の間にアイテムを取得するには、mvcwebapiの開始日と終了日を取得する必要があります。これが私が試したがうまくいかなかった私のお気に入りのことです(私はいくつかのことを試しました)。

プロジェクト間で共有されるオブジェクトがあります。

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

getのコントローラークラスは次のとおりです。

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タイプであるクライアントからの私の呼び出しは次のとおりです。

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;
          ......
}

また、機能しているように見えるプットに変更してみましたが、結果を解析できませんでしたContent.ReadAsAsync

任意の提案をいただければ幸いです

4

2 に答える 2

6

デフォルトでは、複合型(SchedulerDateSpanなど)がリクエスト本文で渡されることが期待されています。URIから値を渡す場合は、アクションパラメータのマークを[FromUri]に変更する必要があります。

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

次に、次のように、URIのクエリ文字列から「日付」を渡すことができます。

HttpResponseMessage resp = client.GetAsync(
  String.Format("api/Appointments?dates.StartDate={0}&dates.EndDate={1}", 
    dates.StartDate.ToString(),
    dates.EndDate.ToString())).Result;
于 2012-11-27T21:20:29.267 に答える
3

クエリ文字列を介して複雑なオブジェクトを渡そうとしている場合は、Getメソッドパラメータを次の[FromUri]属性で修飾する必要があります。

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

クエリ文字列は次のようになります。

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

幸運を!

于 2012-11-27T21:18:52.090 に答える