【发布时间】:2020-12-15 17:42:20
【问题描述】:
我正在尝试使用属性路由。由于各种原因,我的密码重置所需的 Guid 参数之一不能在 queryString 中,因此我不得不将它放在路径中。这本身不是问题,除了我无法让 resetToken 填充到我的控制器中 - 即使它与基于我定义的 Route 属性的控制器方法匹配。
所以给定这个网址:
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing
我正在尝试使用属性路由。由于各种原因,我的密码重置所需的 Guid 参数之一不能在 queryString 中,因此我不得不将它放在路径中。这本身不是问题,除了我无法让 resetToken 填充到我的控制器中 - 即使它与基于我定义的 Route 属性的控制器方法匹配。
所以给定这个网址:
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing
将您的操作更改为:
[Route("~/Account/ResetPasswordBySMS/{resetToken?}")]
public ActionResult ResetPasswordBySMS(string resetToken, [FromQuery] string userId, [FromQuery] string code)
{
var guidResetToken= new Guid(resetToken);
}
我在 Postman 中测试了 url http://localhost:55480/Account/ResetPasswordBySMS/96b7ba88-65e0-4dbc-a012-e69545a29a55?userid=9d394579-afbb-49c4-ba21-877f4dad91fa&code=fghjk。它正在工作。
将查询字符串与路由混合并不是一个好主意。我也会在路由中添加 userId 和代码:
[Route("~/Account/ResetPasswordBySMS/{resetToken?}/{userId?}/{code?}
public ActionResult ResetPasswordBySMS(string resetToken, string userId, string code)
我可以在重置令牌之后和之前看到 url 错误 - 斜杠?标记。这个斜线应该没有了。
【讨论】:
/ResetPasswordBySMS/?resetToken=x?userId=y&code=z