发现了匹配请求的几个操作 - webapi 匿名类型+函数

本文关键字:webapi 操作 函数 类型 几个 请求 发现 | 更新日期: 2023-09-27 17:56:14

我正在从我的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;
            }
        }

发现了匹配请求的几个操作 - webapi 匿名类型+函数

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

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

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

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