mvc api配置不起作用

时间:2014-03-07 15:55:49

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

我有api配置和问题的问题Api控制器。我实现了很多方法,但它不起作用。问题是:

我的Api控制器:

 public class HomeValuesController : ApiController
    {
        public string GetFindID()
        {
            string NewID = "";
            CarrierDao DaoObj = new CarrierDao();
            NewID = DaoObj.FindID();
            return NewID;
        }

        public int Test()
        {
            int i = 10;
            return i;
        }
}

在这里,我必须采用方法。

和我的Api配置文件:

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
              name: "ActionApi",
              routeTemplate: "api/{controller}/{action}",
              defaults: new { action = "Get" }
          );

现在,当我使用网址

http://websitedom.com/api/HomeValues/test

它将采用 GetFindID 方法而不是测试

我也在互联网上搜索了一些但没有工作。请告诉我我在做什么错误。

1 个答案:

答案 0 :(得分:0)

您正在应用的概念是错误的。 API控制器映射到HTTP谓词而不是方法名称。这与MVC略有不同。

您可以在发出请求时使用任何类型的动词,例如GET,POST,PUSH等,实际上这取决于请求。然后路由逻辑将选择具有该动词作为前缀的方法。它不会像你认为的那样匹配行动的名称。

修改

如果您正在寻找使用API​​方法的自定义名称,那么您可以使用属性路由。 有关详细信息,请查看此http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2。请注意,WebAPI 2或更高版本中不提供属性路由。

回答你的问题:

[Route("api/home/test")]
public int Test()
        {
            int i = 10;
            return i;
        }