网上例子说的webapi方法好像只区分请求方式, get请求调用controller里面的getxxx方法,然后还可以通过有没有附加参数确定
那比如我想通过两个不同的关键字去查询数据,比如getA(string id)和getB(string name)
这样我需要如何写地址才能分别调用这两个方法?
是不是给附加参数的时候{id:xxx}和{name:xxx}就能区分上面的情况
还有一种只是方法名不一样,但参数名都是一样的,怎么办?比如getA(string id)和getB(string id)
e.g. ( code for testing , don't use in producting)
Code defintion
model->Product
1 Public class Product{ 2 Public int id{get;set;} 3 Public string name{get;set;} 4 Public string description{get;set;} 5 }
controller->ProductController
1 public class ProductController:ApiController{ 2 3 Private IList<Model.Product> products=new List<Model.Product>(); 4 5 Public ProductController(){ 6 products.Add(new Product{id:1,name:"product1",description:"product desc"}); 7 products.Add(new Product{id:2,name:"product2",description:"product desc"}); 8 products.Add(new Product{id:3,name:"product3",description:"product desc"}); 9 } 10 11 // get product by product id 12 // api/products/1 13 Public Model.Product Get(int id){ 14 return products.Find(p=>p.id=id); 15 } 16 17 // get product by product name 18 // api/products/?name=product1 19 Public Model.Product Get(string name){ 20 return products.Find(p=>p.name=name); 21 } 23 }
route->Global
1 routes.MapHttpRoute( 2 name: "DefaultApi", 3 routeTemplate: "api/{controller}/{id}", 4 defaults: new { id = RouteParameter.Optional } 5 );
How to use
get product by product id
uri->http://domainname/api/products/1
result->{id:1,name:"product1",description:"product desc"}
uri->http://domainname/api/products/?name=product1
result->{id:1,name:"product1",description:"product desc"}
Thanks
"还有一种只是方法名不一样,但参数名都是一样的,怎么办?比如getA(string id)和getB(string id)"
you can define routing implementation
路由
你弄一个查询实体参数就可以了。