路由发布到非标准的uri web api

时间:2016-05-19 17:02:46

标签: c# rest asp.net-web-api

我正在编写REST web api,我需要使用 / api / users / {id} / modify http://localhost:8080/api/users/6/modify 这样的端点一个POST方法。

我有一个带有读/写操作的UsersController类,但我只能通过访问/ api / users而不是/ api / users / 6 / modify来访问post方法。我需要扩展层次结构(如果说得好)。

我该如何做到这一点?

1 个答案:

答案 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 ...
    }
}