我正在创建web api,如下所示:
public class ProductsController : ApiController
{
//Get Products Prices
public string GetProductPrices(string ProductName)
{
//some method definition
}
}
我已经定义了webapiconfig如下。
config.Routes.MapHttpRoute(
name: "Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { controller = "Products", action = "ProductVariations", id = RouteParameter.Optional });
当我尝试从url调用web api时,它会返回错误400。
我按以下方式调用上述方法:
1)http://site.com/api/Products/apple-ipod-touch/GetProductPrices
2)http://site.com/api/Products/GetProductPrices/apple-ipod-touch
请纠正我的错误。
答案 0 :(得分:0)
首先阅读此article。
您必须使用ProductName
创建路线,或者必须使用Id
参数输入创建cotroller名称。您无法将ProductName
路由映射到Id
输入参数。
PS:请求api的第一种方式无效。你有一个路由,其中控制器名称在url中有第二个位置,它定义为不能在第三个位置,它不会与预定义路由匹配。
如果修改路线:
config.Routes.MapHttpRoute(
name: "Default",
routeTemplate: "api/{controller}/{action}/{ProductName}",
defaults: new { controller = "Products", action = "ProductVariations", ProductName = RouteParameter.Optional });
但最好在你的webapi网址中使用id,这个网址网址会更整洁。