MVC Web Api调用方法无法正常工作

时间:2014-05-08 11:49:43

标签: asp.net-mvc asp.net-web-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

它始终显示请求无效。

2 个答案:

答案 0 :(得分:0)

我怀疑它正在尝试拨打Get(int id),然后尝试传递密码&#34;密码&#34;作为整数参数。从我可以回想起它的结果是,当你发出GET请求时,它会寻找一个名为Get的方法。在这种情况下,它找到一个。然后根据路由,即在控制器名称出现ID之后,它会查看URL的下一部分,在这种情况下&#34;密码&#34;,然后将其用作{{1}的值}参数。

如果您要删除这两种id方法,您可能会发现您的网址有效,但如果您添加其他Get方法,则会遇到与&#34相关的其他问题;找到多个操作& #34 ;.如果您决定需要多个HttpGet方法,以下讨论可能会有所帮助:

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

答案 1 :(得分:0)

如果你想调用像"http://localhost:49365/api/mycontrollername/password"

这样的api函数

您必须在控制器上添加ActionName属性并在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 }
        );