具有两个参数的 MVC6 属性路由

MVC6 attribute routing with two parameters

我已经四处查看了这个,但没有任何与 MVC6 taghelper 锚标记有关的替代 [HttpGet] 方法可以满足多个参数的要求。

当然,您可以将多个参数添加到 MVC6 锚点标签助手,但是如何使用属性路由处理带有两个参数的第二个选项...

我有两个 [HttpGet] IactionResult 方法:

    //GET: UserAdmin
    public async Task<IActionResult> Index()
    {
        return View(await _userAdminService.GetAllUsers("name_desc", false));
    }


    // GET: UserAdmin/name_desc/True
    [HttpGet("Index/{sortValue}&{showDeactivated}")]
    public async Task<IActionResult> Index(string sortValue, bool showDeactivated)
    {
        return View(await _userAdminService.GetAllUsers(sortValue, showDeactivated));
    }

我认为我尝试使用第二种方法:

<a asp-action="Index" asp-route-sortValue="@Model.DisplayName" asp-route-showActivated="@Model.ShowDeActivated">Name: <span class="glyphicon glyphicon-chevron-down"></span></a>

呈现为:

<a href="/UserAdmin?sortValue=name showActivated=True">Name: <span class="glyphicon glyphicon-chevron-down"></span></a>

    localhost.../UserAdmin?sorValue=name&showActivated=True

它永远不会使用第二种方法。

使用 MVC6 锚点标记帮助器使用带有两个参数的第二个 [HttpGet] 方法需要做什么?

编辑

还有你如何处理路由属性中分隔两个参数的符号...

路由模板中不支持 & 符号。这个想法是,&符号用于查询字符串,它将始终应用于任何路由模板。这就是为什么你的第二个动作永远不会被调用。

例如,您可以将路线模板更改为 [HttpGet("UserAdmin/Index/{sortValue}/{showDeactivated}")]

官方文档link

在这种情况下不要分散你的行动。您只需一次操作即可轻松完成此操作:

public async Task<IActionResult> Index(string sortValue, bool showDeactivated)
{
    var sort = string.IsNullOrWhiteSpace(sortValue) ? "name_desc" : sortValue;

    return View(await _userAdminService.GetAllUsers(sort, showDeactivated));
}

如果未提供 sortValue GET 参数,它将默认为 null,如果未提供 showDeactivated,它将默认为 false.

ASP.NET 核心的最新版本可以处理这个:

[HttpGet("Index")]
public async Task<IActionResult> Index([FromQuery(Name ="sortValue")]string sortValue,[FromQuery(Name ="showDeactivated")] bool showDeactivated)