pei*_*rix 5 .net routing asp.net-web-api
我正在使用新的.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";
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.如果我去/api/form/method2,我得到OK-Get回应.
我认为这与路由有关,但我不确定,因为我之前没有使用过MVC.我尝试过这样设置WebApiConfig.cs:
config.Routes.MapHttpRoute(
name: "FormApi",
routeTemplate: "api/form/{action}"
);
Run Code Online (Sandbox Code Playgroud)
但那没有做任何事.
路由几乎是正确的,但主要问题是您缺少其他操作方法所需的 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";
}
}
Run Code Online (Sandbox Code Playgroud)
使用属于 App_Start/RouteConfig.cs 的路由映射
routes.MapHttpRoute(
name: "FormApi",
routeTemplate: "api/form/{action}",
defaults: new { controller = "form", action = "Get"}
);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请阅读http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection