发现匹配请求的几个动作 - webapi匿名类型+功能

时间:2014-04-03 06:04:29

标签: c# asp.net-web-api

我从webapi控制器返回anonymouse类型,这是我需要使用函数计算的值之一。当我试图这样做时,会收到错误说"发现了几个与请求匹配的操作"。 以下是我打电话给GET的方式:

// GET api/Grafik/5
        public IHttpActionResult GetGrafik(int id)
        {
            xTourist t = db.xTourist.Find(id);
            var beach = db.xAdres.Find(t.Hotel).Kod;
            var result = from a in db.Grafik
                          join b in db.Excursions on a.Excursion equals b.Kod
                          join c in db.Dates on a.KodD equals c.KodD      
                          join d in db.Staff on a.Guide equals d.Kod
                         where c.Date > t.ArrDate && c.Дата < t.DepDate
                          let pu = from x in db.xPickUp where x.KodP == beach && x.Excursion == b.Kod select x.PickUpTime
                                   orderby c.Date
                          select new { kodg = a.Kodg, excursion = b.Name, guide = d.GuideName, data = c.Date, pricead = b.Price, 
                              pricech = b.PriceChd, pax = t.Pax, child = t.Ch, paxleft = GetPax(a.Kodg), pickup = pu.FirstOrDefault()};
            return Ok(result);
        }

这是返回所需值的函数:

public int GetPax(int id)
        {
            //get pax quota
            var pre = db.Grafik.Where(k => k.Kodg == id).Select(p => p.Quota).SingleOrDefault();
            if (pre.HasValue && pre.Value > 0)
            {
                //Get taken pax
                var p = (from a in db.Orders where a.Kodg == id & !(a.Cansel == true) select a.Child).Sum();
                var c = (from a in db.Orders where a.Kodg == id & !(a.Cansel == true) select a.Pax).Sum();
                if (p.HasValue & c.HasValue)
                {
                    return pre.Value - (p.Value + c.Value);
                }
                else
                {
                    return pre.Value;
                }
            }
            else
            {
                return 0;
            }
        }

2 个答案:

答案 0 :(得分:0)

Web API看到两个公共方法id作为参数,它无法确定在您发送请求时要执行的方法。查看您的代码,不需要将帮助方法GetPax()公开。尝试将其更改为私人。

private int GetPax(int id) // ...

答案 1 :(得分:0)

我找到了解决方案。好吧,这可能有点奇怪,但它正在发挥作用。

public IHttpActionResult GetГрафик(int id)
        {
            xTourist t = db.xTourist.Find(id);
            var beach = db.xAdres.Find(t.Hotel).Kod;
            var result = from a in db.Grafik
                          join b in db.Excursions on a.Excursion equals b.Kod
                          join c in db.Dates on a.Kodd equals c.Kodd      
                          join d in db.Staff on a.Guidename equals d.Kod
                          join e in db.Заказы on a.КодГ equals e.КодГ
                         where c.Дата > t.Датапр && c.Дата < t.Датаотл
                          let pu = from x in db.xPickUp where x.КодП == beach && x.Excursion == b.Kod select x.PickUpTime
                                   orderby c.Дата
                                   let pl = a.Пребукинг - (e.Child + e.Pax)
                          select new { kodg = a.КодГ, excursion = b.Название, guide = d.Name, data = c.Дата, pricead = b.Price, 
                              pricech = b.PriceChd, pax = t.Колчел, child = t.Дети, paxleft = pl, pickup = pu.FirstOrDefault()};
            return Ok(result);
        }