首页 > 解决方案 > 多条路线相同的动作.NET Core 3.1

问题描述

我正在尝试在 .cshtml 中创建一个锚元素,并在多个之间选择一条特定的路线。

控制器:

[Route(""), Route("Products")]
public class ProductsController : Controller 
{
    [HttpGet, Route("Search"), Route("Category/{category}")]
    public IActionResult SearchAction(string query, string category)
    {
        ...
    }
}

.cshtml:

//This two options return "Search?category=A", but I don't want the first route
<a href="@Url.Action("SearchAction", "Products", new { category = "A" })">Link</a>
<a asp-controller="Products" asp-action="SearchAction" asp-route-category="A">Link</a>

//This return null, I want to define which route will be chosen
<a href="@Url.RouteUrl("Search", new { category = "A" })">Link</a>
<a href="@Url.RouteUrl("Products/Search", new { category = "A" })">Link</a>
<a asp-route="Search" asp-route-category="A">Link</a>
<a asp-route="Products/Search" asp-route-category="A">Link</a>
<a href="@Url.RouteUrl("Category", new { category = "A" })">Link</a>
<a href="@Url.RouteUrl("Products/Category", new { category = "A" })">Link</a>
<a asp-route="Category" asp-route-category="A">Link</a>
<a asp-route="Products/Category" asp-route-category="A">Link</a>
<a asp-route="Category/A">Link</a>
<a asp-route="Products/Category/A">Link</a>

标签: c#asp.net-core

解决方案


谢恩科西

您需要命名路线。

我必须命名路线,但这导致了另一个问题,路线应该有一个唯一的模板来命名。所以我从控制器中删除了路由并仅在操作中指定。

public class ProductsController : Controller 
{
    [HttpGet, Route("Products/Search", Name = "Products/Search"), Route("Category/{category}", Name = "Products/Category")]
    public IActionResult SearchAction(string query, string category)
    {
        ...
    }
}

我可以这样使用:

<a asp-route="Products/Category" asp-route-category="A">Link</a>
<a href="@Url.RouteUrl("Products/Category", new { category = "A" })">Link</a>
<a asp-route="Products/Search" asp-route-category="A">Link</a>
<a href="@Url.RouteUrl("Products/Search", new { category = "A" })">Link</a>

推荐阅读