5

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

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}"
);

但这无济于事。

4

1 回答 1

3

路由几乎是正确的,但主要问题是您缺少其他操作方法所需的 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"}
);

有关更多信息,请阅读http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection

于 2012-11-14T16:33:00.033 回答