我有两个动作,每当我明确地调用第二个动作时,第一个动作仍会被调用。我需要能够在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 }
);
}
我收到错误:找到了与请求匹配的多项操作
答案 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动词有一个动作