我有两条路线:
routes.MapRoute(
name: "Default1",
url: "{controller}/{action}/{id}/{id2}"
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我的控制器如下:
public class ProductsController : ApiController
{
...
public int GetAll(int id,int id2)
{
return 1;
}
public Product GetProduct(int id)
{
....
return item;
}
}
写作时:http://localhost:9000/api/products/2
它匹配第二条规则并且:
但是当我写http://localhost:9000/api/products/2/3
(假设与第一条规则匹配)时:
问题
我的错误在哪里?
nb:
正在运行http://localhost:9000/api/products/2?id2=1
会给出正确的结果 - 但是嘿!我专门为这个做了一条路线!
答案 0 :(得分:1)
我认为你的问题是你已经在RouteConfig而不是WebApiConfig中定义了上面的路由。应该在WebApiConfig中定义Web Api路由,如果你看一下,你应该找到默认路由:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
为了匹配网址:api/products/2/3
,您需要在现有默认路由之前向WebApiConfig添加新路由:
config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: "api/{controller}/{id}/{id2}"
);
答案 1 :(得分:0)
这是您的路线解决方式。
您需要更改路线的顺序。
将Default
放在第一位,将Default1
放在最后,因为它有更多要解析的目录。
答案 2 :(得分:0)
您没有在请求中提供操作。因此,要触发您的第一条路线,您需要致电:
http://localhost:9000/api/products/getall/2/3