我正在编写REST web api,我需要使用 / api / users / {id} / modify 或 http://localhost:8080/api/users/6/modify 这样的端点一个POST方法。
我有一个带有读/写操作的UsersController类,但我只能通过访问/ api / users而不是/ api / users / 6 / modify来访问post方法。我需要扩展层次结构(如果说得好)。
我该如何做到这一点?
答案 0 :(得分:2)
您可以使用asp.net web api的Attribute Routing。
首先是在HttpConfiguration
上启用它,在asp.net web api模板中,您可以在WebApiConfig.cs
文件中看到它。
using System.Web.Http;
namespace WebApplication
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
// Other Web API configuration not shown...
}
}
}
之后,您可以定义一个应继承自ApiController
的控制器,您可以使用Route
属性为样本定义自定义路径:
[RoutePrefix("api/users")]
public class UsersController : ApiController
{
[HttpPost]
[Route("{id}/modify")]
public HttpResponseMessage PostModify(int id)
{
// code ...
}
}
RoutePrefix
将为控制器上的所有操作定义前缀。因此,要访问PostModify
,您应该在/api/users/6/modify
操作中使用post
之类的路由。如果您不想要它,只需删除RoutePrefix
并在路由属性上定义完整的网址,如下所示:/api/users/{id}/modify
。
您还可以保证定义此类路线的id
参数的类型:
[RoutePrefix("api/users")]
public class UsersController : ApiController
{
[HttpPost]
[Route("{id:int}/modify")]
public HttpResponseMessage PostModify(int id)
{
// code ...
}
}