【问题标题】:MVC WebApi Get passing an object in C#MVC WebApi 在 C# 中获取传递对象
【发布时间】:2012-11-15 04:16:07
【问题描述】:

我需要获取我的 mvc webapi 的 from 和 to date 来检索这些日期之间的项目。这是我尝试过但没有奏效的最喜欢的事情(我尝试了几件事)。

我有一个在项目之间共享的对象:

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

我还尝试将其更改为似乎可以使用的 put,但后来我无法使用 Content.ReadAsAsync 解析结果

欢迎提出任何建议

【问题讨论】:

    标签: asp.net-mvc json asp.net-web-api


    【解决方案1】:

    如果您尝试通过查询字符串传递复杂对象,则需要使用 [FromUri] 属性装饰您的 Get 方法参数:

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

    您的查询字符串如下所示:

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

    祝你好运!

    【讨论】:

      【解决方案2】:

      默认情况下,复杂类型(例如您的 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;
      

      【讨论】:

      • 像冠军一样工作!谢谢!!
      猜你喜欢
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      相关资源
      最近更新 更多