当多个参数时,Web Api不起作用?

时间:2014-10-04 21:47:53

标签: asp.net asp.net-web-api routing

我有两条路线:

 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

它匹配第二条规则并且:

enter image description here

但是当我写http://localhost:9000/api/products/2/3(假设与第一条规则匹配)时:

enter image description here

问题

我的错误在哪里?

nb:

正在运行http://localhost:9000/api/products/2?id2=1会给出正确的结果 - 但是嘿!我专门为这个做了一条路线!

(already read this answer - didn't help much)

3 个答案:

答案 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