【问题标题】:WebApi and RoutingWebApi 和路由
【发布时间】:2015-08-19 05:43:02
【问题描述】:

我有一个问题,我的 POST 没有在 Web 服务器上被命中。它会进入我的控制器的构造函数,但不会进入我设置的 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 方法。

【问题讨论】:

    标签: routes asp.net-web-api


    【解决方案1】:

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

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

    【讨论】:

    • _dc 被我们使用的框架标记到 URL 上。我认为这是为了缓存,但不是 100% 确定。无论哪种方式,数据都不是我们在服务器端使用的东西。数据实际上是在正文中发布的。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      所以只是为了解决这个问题。我在 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)
      

      【讨论】:

        猜你喜欢
        • 2016-12-17
        • 2020-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-04
        • 1970-01-01
        相关资源
        最近更新 更多