Asp.Net Web API 2 中带参数的属性路由
Attribute Routing with Parameters in Asp.Net Web API 2
在 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());
}
}
其他操作也需要路由模板,在某些情况下还需要参数约束
更新路线。
//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);
}
在 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());
}
}
其他操作也需要路由模板,在某些情况下还需要参数约束
更新路线。
//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);
}