【问题标题】:Asp.net core attribute route issueAsp.net core 属性路由问题
【发布时间】:2021-04-20 03:47:27
【问题描述】:

我有这个代码:

[Route("Users")]
public class UserRegistrationController : Controller 
{
    [HttpGet("details/{userId}")]
    public async Task<IActionResult> UserDetails(Guid userId)
    {
        // .....
    }

    [HttpPost("Save")]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> SaveUser(UserVM userVM)
    {
        // ......
        return RedirectToAction("details", "Users", new { userId = userVM.UserId });
    }
}     

如果我将用户 redirectToAction 保存为查询字符串生成 userId,这会产生问题。

我的意思是代替

https://localhost:5001/Users/Details/5de304c7-4c69-4819-c879-08d90306b555 

redirect to action 将 URL 创建为

https://localhost:5001/Users/Details?userId=5de304c7-4c69-4819-c879-08d90306b555 

这会导致 404 错误。

我该如何解决这个问题?我想在路由中传递 userId,如下所示

https://localhost:5001/Users/Details/5de304c7-4c69-4819-c879-08d90306b555

提前致谢。

【问题讨论】:

  • userVM.UserId 的类型是什么?如果是string,那么试试return RedirectToAction("details", "Users", new { userId = new Guid(userVM.UserId) });
  • @Karan userVM.UserId 已经是 GUID,因此无需再次创建 Guid。抱歉这个不行

标签: asp.net asp.net-core attributerouting


【解决方案1】:

问题是,动作方法UserDetails需要添加路由[Route("details")]这样就可以解决问题了。

[Route("Users")]
public class UserRegistrationController : Controller 
{
    [HttpGet("details/{userId}")]
    [Route("details")]
    public async Task<IActionResult> UserDetails(Guid userId)
    {
        // .....
    }

    [HttpPost("Save")]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> SaveUser(UserVM userVM)
    {
        // ......
        return RedirectToAction("details", "Users", new { userId = userVM.UserId });
    }
}     

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多