Asp.net core 如何使用标记帮助器创建指向在管线属性中使用斜杠的控制器/操作的链接?

Asp.net core 如何使用标记帮助器创建指向在管线属性中使用斜杠的控制器/操作的链接?,asp.net-core,asp.net-core-mvc,asp.net-mvc-routing,asp.net-core-2.0,asp.net-core-tag-helpers,Asp.net Core,Asp.net Core Mvc,Asp.net Mvc Routing,Asp.net Core 2.0,Asp.net Core Tag Helpers,在开始之前,我知道有类似的问题,但它们都与在路由中使用带参数的斜杠有关,这不是我想要实现的(至少现在还没有) 我正在创建一个ASP.NET Core 2 MVC web应用程序,在创建指向我的操作的链接时,我的路由中的斜杠会被转义。我有以下控制器: [Route("Manage/Account")] public class AccountsController : Controller { [Route("[Action]")] public IActionResult Ind

在开始之前,我知道有类似的问题,但它们都与在路由中使用带参数的斜杠有关,这不是我想要实现的(至少现在还没有)

我正在创建一个ASP.NET Core 2 MVC web应用程序,在创建指向我的操作的链接时,我的路由中的斜杠会被转义。我有以下控制器:

[Route("Manage/Account")]
public class AccountsController : Controller
{
    [Route("[Action]")]
    public IActionResult Index() => View();

    [Route("[Action]")]
    public IActionResult Other() => View();
}
以及视图中的以下链接:

<a asp-controller="Manage/Accounts" asp-action="Index">Accounts</a>
<a asp-controller="Manage/Account" asp-action="Other">Accounts (Other)</a>
然后在视图中添加链接,如下所示:

@Html.ActionLink("Accounts", "Index", "Manage/Accounts")
@Html.ActionLink("Accounts (Other)", "Other", "Manage/Accounts")
然后呈现为:

<a href="/Manage/Accounts">Accounts</a>
<a href="/Manage/Accounts/Other">Accounts (Other)</a>


遗憾的是,
[RoutePrefix(…)]
属性在ASP.NET核心MVC中不可用,而且使用标准的
[Route(…)]
属性似乎无法模拟MVC5中的行为。

您似乎混淆了控制器和路由。使用
asp-controller
时,需要提供控制器类的名称(不带
controller
后缀)。在您的情况下,您需要:


另一方面,您可以简化属性,如下所示:

[路由(“管理/帐户/[操作]”)
公共类帐户控制器:控制器
{
public IActionResult Index()=>View();
public IActionResult Other()=>View();
}

[action]
令牌可以在控制器级别应用,如图所示,避免了将其添加到每个方法中的需要。

您似乎混淆了控制器和路由。使用
asp-controller
时,需要提供控制器类的名称(不带
controller
后缀)。在您的情况下,您需要:


另一方面,您可以简化属性,如下所示:

[路由(“管理/帐户/[操作]”)
公共类帐户控制器:控制器
{
public IActionResult Index()=>View();
public IActionResult Other()=>View();
}

[action]
令牌可以在控制器级别应用,如图所示,避免了将其添加到每个方法中。

@Kirk所说的完全正确。我只想让您了解一下MVC中的
区域
,因为通过查看示例中的链接,您似乎希望这些链接以
/manage
开头


我之前分享了如何在MVC中设置区域。你可以看看。

柯克所说的完全正确。我只想让您了解一下MVC中的
区域
,因为通过查看示例中的链接,您似乎希望这些链接以
/manage
开头


我之前分享了如何在MVC中设置区域。你可以看看。

谢谢柯克。我已经更新了我的问题,以提供更多关于我试图实现的内容的上下文,但你是对的,我犯了一个错误,认为标记帮助程序的功能与以前的html帮助程序相同。还感谢您提供有关将操作添加到控制器路由的提示!!!好的,我明白了。看起来你在旧世界好像侥幸逃脱了。你考虑过用刮胡刀吗?哦,天哪!我看过Razor页面,但说实话,除了路由之外,我真的不喜欢它们。我确信,如果我投入足够的时间,我会逐渐喜欢上它们,但我对MVC非常熟悉,所以我会坚持下去:-)是的,我理解这个观点。也许你可以研究一下这个世界上路由是如何工作的,并从中找到灵感。我查看了
asp controller
的源代码,它似乎最终逃逸了
controllerName
值,因为它希望它是一个URL段,而不是一个部分URL(希望有意义)。谢谢Kirk。我已经更新了我的问题,以提供更多关于我试图实现的内容的上下文,但你是对的,我犯了一个错误,认为标记帮助程序的功能与以前的html帮助程序相同。还感谢您提供有关将操作添加到控制器路由的提示!!!好的,我明白了。看起来你在旧世界好像侥幸逃脱了。你考虑过用刮胡刀吗?哦,天哪!我看过Razor页面,但说实话,除了路由之外,我真的不喜欢它们。我确信,如果我投入足够的时间,我会逐渐喜欢上它们,但我对MVC非常熟悉,所以我会坚持下去:-)是的,我理解这个观点。也许你可以研究一下这个世界上路由是如何工作的,并从中找到灵感。我查看了
asp controller
的源代码,它似乎最终转义了
controllerName
值,因为它希望它是一个URL段,而不是一个部分URL(希望有意义)。谢谢David。碰巧的是,我之前已经广泛使用了区域,实际上我正在尝试实现嵌套的要素文件夹(我应该提到,现在已经添加到问题中)。使用区域是向我的功能文件夹添加单层嵌套的一种选择,但尽管我很贪婪,但我想要更多,并求助于自定义路由。谢谢David。碰巧的是,我之前已经广泛使用了区域,实际上我正在尝试实现嵌套的要素文件夹(我应该提到,现在已经添加到问题中)。使用区域是向我的功能文件夹添加单层嵌套的一种选择,但尽管我很贪婪,但我想要更多,并求助于自定义路由。
@Html.ActionLink("Accounts", "Index", "Manage/Accounts")
@Html.ActionLink("Accounts (Other)", "Other", "Manage/Accounts")
<a href="/Manage/Accounts">Accounts</a>
<a href="/Manage/Accounts/Other">Accounts (Other)</a>