WebApi和路由

时间:2015-08-19 05:43:03

标签: routes asp.net-web-api

我遇到的问题是我的POST没有在网络服务器上被点击。它将进入我的控制器的构造函数,但不会进入我设置的post方法。

这是我设置的路线

routes.MapScopedHttpRoute(
    name: "AliasesApi",
    routeTemplate: "api/aliases/{controller}/{id}",
    @namespace: "Test.WebApi.Aliases",
    defaults: new { id = RouteParameter.Optional });

这是控制器

public IResponseModel Post(AliasTreeItem node)
{
    ...
}

被调用的URL在下面,它定义为POST

http://localhost:61265/api/aliases/alias?_dc=1439962373744

有人可以看到这个有什么问题吗?

我的Get方法被点击而不是这个Post方法。

3 个答案:

答案 0 :(得分:0)

但你的帖子有一个名为node的参数,在url中你有一个参数_dc(名称需要相同),参数名称不同,同样,node是AliasTreeItem类型,我认为是class,所以最好将数据发送到请求体中。

另外,为了测试我建议使用邮递员或提琴手。

答案 1 :(得分:0)

您需要将[FromBody]属性添加到控制器操作中,如下所示:

public IResponseModel Post([FromBody]AliasTreeItem node)
{
    ...
}

这将告诉 WebApi 该路由期望正文中有AliasTeamItem的POST请求。即使你没有在身体中发送任何东西,这也行,因为你的参考类型的空体内容将为空。

答案 2 :(得分:0)

所以只是围绕这一个。我在GET方法上使用路由属性,因为我有两个GET请求。我只有一个PUT请求,所以我没有在该方法上添加路由请求。结果我需要那种方法。我的3种方法如下,现在它们似乎都正常工作。

        // GET /api/aliases/alias
        [Route(Order = 1)]
        public IResponseModel Get(string id)

        // GET /api/aliases/alias/simple
        [Route("simple", Order = 2)]
        public IResponseModel GetSimple(int page, int start, int limit, string query = null)

        // POST /api/aliases/alias
        [Route(Order = 3)]
        public IResponseModel Post([FromBody]AliasTreeItem node)