.NET Web API中的多个url级别

.NET Web API中的多个url级别,.net,routing,asp.net-web-api,.net,Routing,Asp.net Web Api,我正在使用新的.NETWebAPI设置rest服务,我遇到了一个小问题。我们希望有一点不同的路线,但我不知道如何实现这一点 public class FormController : ApiController { // api/form public string Get() { return "OK-Get"; } // api/form/method1 public string Method1() {

我正在使用新的.NETWebAPI设置rest服务,我遇到了一个小问题。我们希望有一点不同的路线,但我不知道如何实现这一点

public class FormController : ApiController
{

    // api/form
    public string Get()
    {
        return "OK-Get";
    }
    // api/form/method1
    public string Method1()
    {
        return "OK1";
    }
    // api/form/method2
    public string Method2()
    {
        return "OK2";
    }
}
但这不起作用。如果我转到
/api/form/method2
,我会得到
OK-get
作为响应

我认为这与路由有关,但我不确定,因为我以前没有使用过MVC。我在
WebApiConfig.cs
中尝试过这样设置:

config.Routes.MapHttpRoute(
    name: "FormApi",
    routeTemplate: "api/form/{action}"
);

但是这没有起到任何作用。

路由几乎是正确的,但主要问题是您缺少其他操作方法上所需的HttpMethod属性<代码>[HttpGet]由于其名称而在第一个方法上推断。这就是您需要的:

public class FormController : ApiController
{
    // api/form
    public string Get()
    {
        return "OK-Get";
    }

    // api/form/method1
    [HttpGet]
    public string Method1()
    {
        return "OK1";
    }

    // api/form/method2
    [HttpGet]
    public string Method2()
    {
        return "OK2";
    }
}
使用App_Start/RouteConfig.cs中的路线图

routes.MapHttpRoute(
    name: "FormApi",
    routeTemplate: "api/form/{action}",
    defaults: new { controller = "form", action = "Get"}
);

欲了解更多信息,请阅读有效的!非常感谢。只需注意,路由配置需要在
WebApiConfig.cs
中才能生效。