我的ASP.NET web api有两个功能:一个返回所有产品的列表,另一个根据条件返回一个列表。
public class ProductsController : ApiController
{
List<Product> lst = new List<Product>
{
new Product(){ Id = 1, Name = "a Soup", Category = "Groceries", Price = 1 },
new Product(){Id = 2, Name = "b Soup", Category = "stat", Price = 4 },
new Product(){ Id = 3, Name = "c Soup", Category = "Groceries", Price = 1 }
};
public List<Product> GetAllProducts()
{
return lst;
}
public List<Product> GetProducts(int k)
{
return lst.Where(p => p.Price == k).ToList();
}
}
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我正在使用jQuery的GET方法,如下所示:
<script type="text/javascript">
function getProducts() {
$.getJSON("api/products/1",
function (data) {
debugger;
});
}
$(document).ready(getProducts);
</script>
这个函数调用第一个函数GetAllProducts即使我通过调用
调用它"api/products/1"
我的问题是它如何确定从客户端调用时要调用哪个函数?
答案 0 :(得分:2)
如果您使用的是最新版本的Web API,则可以查看Attribute Routing。这将允许您使用相关模式修饰方法。
[Route("products/getAll")]
public List<Product> GetAllProducts()
{
return lst;
}
[Route("products/getByPrice/{price}")]
public List<Product> GetProducts(int price)
{
return lst.Where(p => p.Price == price).ToList();
}
以上只是一个例子,因此您可以选择适合您需求的产品。如果您使用旧版本,则可以获得AttributeRouting library here。
您还有ActionPresedence
,请参阅my question here。
答案 1 :(得分:0)
此控制器中有许多Get
个方法。 Web API是Restful,然后在您调用服务器时它将返回名为Get
的第一个方法,在您的情况下 GetAllProducts 。您可以直接调用其他方法:
function getProducts() {
$.getJSON("api/products/GetProducts/1",
function (data) {
debugger;
});
}
如果您使用的是WebAPI v2.0,则可以使用atributte路由为控制器中的每个方法设置默认路由:
[Route("api/products/{k}")]
public List<Product> GetProducts(int k)
{
return lst.Where(p => p.Price == k).ToList();
}
然后你可以打电话给“api / products / 1”。
答案 2 :(得分:0)
Web API框架使用WebApiConfig.cs文件中定义的路由表,该文件位于App_Start目录中。
Web API的Visual Studio项目模板创建了一个默认路由:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
当Web API收到HTTP请求时,它会尝试将URI与路由表中的某个路由模板进行匹配。
如果没有路由匹配,则客户端收到404错误。例如,以下URI与默认路由匹配:
/api/contacts
/api/contacts/1
/api/products/gizmo1
但是,以下URI不匹配,因为它缺少&#34; api&#34;段:
/contacts/1
在您的情况下,您有一个名为Products的控制器和两个Get方法。这符合惯例,Web Api使用第一个。