2014-05-08 22 views
0

我试图实现三个方法控制器MVC网页API调用方法不能正常工作

public IEnumerable<string> Get() 
     { 
      return new string[] { "value1", "value2" }; 
     } 

     public IEnumerable<string> Get(int id) 
     { 
      return new string[] { "sa1", "sa2" }; 
     } 
     [HttpGet] 
     public IEnumerable<string> password() 
     { 
      return new string[] { "password", "password" }; 
     } 
config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

但是当我试图调用http://localhost:49365/api/mycontrollername/password

它总是显示的请求无效。

+0

你能告诉我们你的路由配置的例子。还有什么是你得到确切的错误? (即404未找到)。 –

+0

没有它工作,我已经取代默认路径withconfig.Routes.MapHttpRoute( 名称:“DefaultApi”, routeTemplate:“api/{控制器}/{行动}/{id}”, 默认值:new {id = RouteParameter。可选} ); – Saurabhchauhan232

回答

0

,如果你要调用API函数一样"http://localhost:49365/api/mycontrollername/password"

必须添加控制器上ActionName属性和补充:如果你决定你需要有多个HttpGet方法下面的讨论可能有助于在Routeconfig.cs上路由;

这里是

[ActionName("GetEmployees")] 
    public IEnumerable<Employee> GETEmployees() 
    { 
     return _db.Employees.AsNoTracking(); 
    } 

    routes.MapRoute(
      name: "Default", 
      url: "api/{controller}/{action}/{id}", 
      defaults: new { controller = "Employees", action = "GetEmployees", id =  UrlParameter.Optional } 
     ); 
+0

我已经做过了,但非常感谢你给你宝贵的时间来回答 – Saurabhchauhan232

0

我怀疑它试图调用Get(int id),然后尝试传递单词“password”作为整数参数。从我能记得的事情来看,这是由于在进行GET请求时寻找一种名为Get的方法。在这种情况下,它找到一个。然后基于路由,即在控制器名称带有ID后,它会查看URL的下一部分(本例中为“password”),然后将其用作参数的值。

如果您要删除两个Get方法,您可能会发现您的URL有效,但如果添加其他HttpGet方法,则会遇到与“找到多个操作”相关的其他问题。

Web Api Routing for multiple Get methods in ASP.NET MVC 4