asp.net核心属性路由问题

时间:2021-04-20 03:47:27

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

我有这个代码:

[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 

重定向到操作创建的 URL 为

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

导致 404 错误。

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

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题是,操作方法 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 });
    }
}