路由,打错了动作

时间:2013-05-08 13:26:33

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing url-routing

我有两个动作,每当我明确地调用第二个动作时,第一个动作仍会被调用。我需要能够在mysite.com/api/Awesome/GetSomeExamples中编写,而不会总是触发GetAllClasses

public class AwesomeController : Controller
{
   public IEnumerable<myClass> GetAllClasses()
   {
      //...some stuff
   }
   public IEnumerable<string> GetSomeExamples()
   {
       //...some stuff
   }
     //... also have some more actions which take in one parameter
}

我的路由是这样的,但没有工作

 public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "ActionApi",
                url: "api/{controller}/{action}/{id}",
                defaults: new { id = UrlParameter.Optional }
            );
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

我收到错误:找到了与请求匹配的多项操作

1 个答案:

答案 0 :(得分:5)

您正在使用Web API。

与正常MVC操作的区别在于Web API查看HTTP谓词以确定要调用的操作。在这种情况下,您有两个以Get

开头的方法

但是,这应该会触发错误:Multiple actions were found that match the request... 它不应该同时调用这两个动作。

您需要的网址是:

mysite.com/api/Awesome/

从那里,Web API将调用以Get开头的方法。您需要删除其他get方法并将其放在不同的控制器中。 Web API假设您每个http动词有一个动作