【问题标题】:Why does this route not work?为什么这条路线行不通?
【发布时间】:2018-09-18 03:25:36
【问题描述】:

关于我的课程:

[Route("api/candidate/free")]

关于方法,我有:

[HttpDelete("{dateRangeId}")]
public IActionResult Delete(int dateRangeId)

这会导致 404:

/api/candidate/free/123

当属性被移除时:

[HttpDelete]
public IActionResult Delete()

这不会导致 404:

/api/candidate/免费/

参数有什么问题?

【问题讨论】:

  • 这很可能是因为您的请求的方法设置为“GET”。提供一个示例,说明您实际上是如何尝试访问该方法的(例如 Postman 调用或 HTML 表单)。
  • 如果是这样,那为什么非参数版本会起作用?
  • “离题”哈哈。

标签: c# .net-core asp.net-core-webapi asp.net-core-routing


【解决方案1】:

这对我有帮助...

[HttpPost("delete")]
public IActionResult Delete([FromQuery] int dateRangeId)

【讨论】:

  • 你那里一直有from查询属性吗?
  • 不,那里什么都没有。
  • 那不是完全不同的路线吗?有问题的是 DELETE 动词,这里是 GET。
  • 我已将其更改为 POST - 发布到以“delete”结尾的路线。
【解决方案2】:

路由约束区分大小写。你有Int,而它应该是int

该操作还应遵循带有约束的预期路由模板以匹配请求,否则您将得到 404 (Not Found)

[Route("api/candidate/free")]
public class MyController : Controller {

    //...

    //DELETE api/candidate/free/123
    [HttpDelete("{dateRangeId:int}")]
    public IActionResult MyAction(int dateRangeId) {

        //...

        return Ok();
    }

}

参考Routing to Controller Actions

参考Routing in ASP.NET Core

【讨论】:

  • 这就是我的想法,但它最初是 int 并且我更改了它,因为另一种有效的方法具有 Int。
  • @IanWarburton 使用该详细信息更新您的问题。您可能遇到路线冲突,但我们无法从您提供的有限信息中判断。显示控制器及其操作。同时展示你是如何提出请求的
  • 我删除了约束,因为没有它它也不起作用。
  • @IanWarburton 您正在显示属性但未显示操作。我们需要同时查看两者,以便能够评估为什么它们没有按预期工作。例如,在我的回答中,我展示了路由属性和操作应该如何协同工作,但这是一个假设,因为您的原始问题缺乏具体细节。
  • 很公平。虽然是404怎么可能是路由冲突呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
相关资源
最近更新 更多