代码之家  ›  专栏  ›  技术社区  ›  Mohan

Asp中带参数的属性路由。Net Web API 2

  •  3
  • Mohan  · 技术社区  · 6 年前

    在Asp中。Net Web API 2属性路由,如果调用任何属性,我需要获取具有该属性的所有数据映射列表,但我得到的是满足条件的序列的第一个元素。
    我的控制器如下所示:

    [RoutePrefix("api/Ifcobjects")]
    public class IfcobjectsController : ApiController
    {
        static List<Ifcobject> Ifcobjects = new List<Ifcobject>()
        {
            new Ifcobject() { Id = 1,Ifctype="Ifcwall", Name = "Stdwall",Tag="Wall",Material="Beton",Breite=25,Betonklasse="C30/37" },
            new Ifcobject() { Id = 2,Ifctype="Ifcwall", Name = "Stdwall",Tag="Wall",Material="Beton",Breite=50 },
            new Ifcobject() { Id = 3,Ifctype="Ifcwall", Name = "Stdwall50cm",Tag="Wall",Material="Beton",Breite=75 },
            new Ifcobject() { Id = 4,Ifctype="Ifcbeam", Name = "beam",Tag="Beam",Material="Beton",Breite=100 }
    
        };
        public IHttpActionResult Get()
        {
            return Ok(Ifcobjects);
        }
    
        public IHttpActionResult Get(int id)
        {
            var Ifcobject = Ifcobjects.FirstOrDefault(s => s.Id == id);
            if (Ifcobject == null)
            {
                //return NotFound();
                return Content(HttpStatusCode.NotFound, "Ifcobject not found");
            }
    
            return Ok(Ifcobject);
        }
    
        [Route("{Ifctype:alpha}")]
        public Ifcobject Get(string ifctype)
        {
            return Ifcobjects.FirstOrDefault(s => s.Ifctype.ToLower() == ifctype.ToLower());
    
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Nkosi    6 年前

    其他操作也需要管线模板,在某些情况下还需要参数约束

    更新管线。

    //GET api/Ifcobjects
    [HttpGet]
    [Route("")]
    public IHttpActionResult Get() {
        return Ok(Ifcobjects);
    }
    
    //GET api/Ifcobjects/1
    [HttpGet]
    [Route("{id:int}")]
    public IHttpActionResult Get(int id) {
        var Ifcobject = Ifcobjects.FirstOrDefault(s => s.Id == id);
        if (Ifcobject == null) {
            //return NotFound();
            return Content(HttpStatusCode.NotFound, "Ifcobject not found");
        }
        return Ok(Ifcobject);
    }
    
    //GET api/Ifcobjects/Ifcwall
    [HttpGet]
    [Route("{Ifctype:alpha}")]
    public IHttpActionResult Get(string ifctype) {
        var results = Ifcobjects.Where(s => s.Ifctype.ToLower() == ifctype.ToLower()).ToList();
        if(results.Count == 0) {
            return Content(HttpStatusCode.NotFound, "ifctype not found");
        }
        return Ok(results);
    }
    

    参考 Attribute Routing in ASP.NET Web API 2