无法调用WebApi 2方法

时间:2016-04-08 10:13:28

标签: asp.net-web-api2 asp.net-mvc-routing url-routing

我在我的项目中添加了一个webapi 2控制器,在api中> LoginAPi如下所示:

enter image description here

在LoginApi中我有以下内容:

[RoutePrefix("api/LoginApi")]
public class LoginApi : ApiController
{
    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }

}

在我的global.asax文件中,我有:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

在App_Start内部我有以下内容:

 public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

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

然后我在LoginAPI中的Get方法中放置一个断点并运行项目并在URL中键入以下内容:

http://localhost:37495/api/LoginApi/4

但我明白了: No HTTP resource was found that matches the request URI 'http://localhost:37495/api/LoginApi/4'.

所以我想好了让我指定方法名称

http://localhost:37495/api/LoginApi/Get/4

返回: The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

现在我已经看了一段时间,所以也许我错过了一些明显的东西,但如果有人能告诉我我做错了什么我会非常感激。

1 个答案:

答案 0 :(得分:0)

您设置的routeTemplate将适用于基于约定的路由,但Web API添加字符串&#34; Controller&#34;搜索控制器类时(根据this article)。因此,您需要重命名控制器类LoginApiController,以使基于约定的路由起作用。

对于基于属性的路由,RoutePrefix属性的添加应与您的操作的Route属性结合使用。尝试将以下内容添加到控制器中的Get方法中:

[HttpGet]
[Route("{id}")]

然后导航到http://localhost:37495/api/LoginApi/4