Routes WebApi与路由

Routes WebApi与路由,routes,asp.net-web-api,Routes,Asp.net Web Api,我有一个问题,我的帖子没有在网络服务器上被点击。它将进入我的控制器的构造函数,但不会进入我设置的post方法 这是我设定的路线 routes.MapScopedHttpRoute( name: "AliasesApi", routeTemplate: "api/aliases/{controller}/{id}", @namespace: "Test.WebApi.Aliases", defaults: new { id = RouteParameter.Opti

我有一个问题,我的帖子没有在网络服务器上被点击。它将进入我的控制器的构造函数,但不会进入我设置的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位于下面,它定义为一篇文章

http://localhost:61265/api/aliases/alias?_dc=1439962373744
有人能看出这有什么问题吗


我的Get方法不是这个Post方法。

但是您的Post有一个名为node的参数,在url中有一个参数_dc(名称必须相同),参数名称不同,而且node是AliasTreeItem类型,我认为它是一个类,因此最好将数据发送到请求体中


此外,为了进行测试,我建议使用postman或fiddler。

但是您的帖子有一个名为node的参数,在url中有一个参数_dc(名称必须相同),参数名称不同,而且node是类型AliasTreeItem,我认为这是一个类,因此最好将数据发送到请求体中


此外,为了进行测试,我建议使用postman或fiddler。

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

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

这将告诉WebApi,路由需要一个正文中带有
AliasTeamItem
的POST请求。即使您没有在正文中发送任何内容,这也会起作用,因为引用类型的空正文内容将为null。

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

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

这将告诉WebApi,路由需要一个正文中带有
AliasTeamItem
的POST请求。即使您没有在正文中发送任何内容,这也会起作用,因为引用类型的空正文内容将为空。

因此,只需将此内容四舍五入即可。我在GET方法上使用了route属性,因为我有两个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)

所以我想把这一个圆满解决。我在GET方法上使用了route属性,因为我有两个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)

我们使用的框架将_dc标记到URL上。我认为这是为了缓存,但不是100%确定。无论哪种方式,数据都不是我们在服务器端使用的东西。数据实际上是在主体中发布的。我们使用的框架将_dc标记到URL上。我认为这是为了缓存,但不是100%确定。无论哪种方式,数据都不是我们在服务器端使用的东西。数据实际上是在主体中发布的。