【问题标题】:MVC 6 / Web API Routing Template IssueMVC 6 / Web API 路由模板问题
【发布时间】:2015-09-15 21:15:18
【问题描述】:

在我的控制器中,我有以下方法:

[HttpGet("SimulateLogin/{userName}/{password}")]

public async Task<IActionResult> SimulateLogin(string userName, string password)
{
  ...
}

如果我调用以下 URL:

BaseUrl/SimulateLogin/用户名/密码

我收到了有效的 (200 / OK) 响应。

如果我调用以下 URL:

BaseUrl/SimulateLogin/?userName=userName&password=密码

我收到无效(404 / 未找到)响应。

有什么区别?为什么第一个有效,第二个无效。我知道这两种格式都适用于以前版本的 MVC / Web API。

【问题讨论】:

  • 仅供参考,以防它不仅用于测试。你不应该把密码放在url中
  • 是的,这仅用于测试目的。关键是无论我选择在 URL 中传递什么参数,所描述的条件都将保持不变。
  • 也许您需要将它们标记为可选的,以便查询字符串也被接受?如果我没记错的话,它被定义为"SimulateLogin/{userName?}/{password?}"
  • @DanielJ.G. - 你的建议奏效了。我肯定需要复习一下路由模板的语法。最令人困惑的是,在以前版本的 MVC / Web API 中我不需要这样做。当然,我们仍处于测试版中,因此这可能会有所改变。无论如何,如果您想让您的评论成为答案,我会将其标记为解决方案。
  • 是的,很难知道哪些事情发生了变化,哪些没有!

标签: asp.net-web-api asp.net-core-mvc


【解决方案1】:

将这些参数作为可选参数添加到您的模板中:

[HttpGet("SimulateLogin/{userName?}/{password?}")]
public async Task<IActionResult> SimulateLogin(string userName, string password)
{
  ...
}

This post 很好地概述了 ASP 5/MVC 6 中更新的路由功能,但如果在 1.0 版本之前发生一些变化,我不会感到惊讶。

【讨论】:

    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 2014-11-27
    • 2013-08-30
    • 2013-01-16
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多