我有一个ASP.NET Core项目,只有一个区域称为Data
。默认的Home
控制器仍然不在区域中。
到项目中的区域Data
的链接无效。路由工作正常。
如果我手动输入链接 localhost / Data ,则会得到区域Index
的控制器Home
的正确动作Data
。因此路由肯定有效。
但是<a asp-area="Data" asp-controller="Home" asp-action="Index">Data</a>
被评估为链接 localhost /?area = Data ,该链接不起作用,实际上应为 localhost / Data 。
Data
区域内的链接也无法正确评估。 localhost / Data / Controller 应该是 localhost / Controller 。再次手动输入链接可以正常工作。
到目前为止,我如何配置项目以尝试使链接正常工作: -路线添加如下
app.UseMvc(routes =>
{
// Default Route
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}"
);
// Area Route
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
Data
中的所有控制器都具有属性[Area("Data")]
。_ViewImport.cshtml
中添加了TagHelper @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
。我通常尝试遵循official documentation,但似乎没有任何效果。
因此,我显然希望在不对链接进行“硬编码”的情况下正常工作,并且想知道为什么预期的行为似乎不起作用。
任何提示都值得赞赏。
答案 0 :(得分:1)
您需要更改路线的顺序。您应该从更具体的路线开始,然后再到更一般的路线:
<ul>
<li><a href="http://172.17.0.2/cgi-bin/info.cgi" target="_blank">Device Facts</a></li>
<li><a href="http://172.17.0.2/cgi-bin/arp.cgi" target="_blank">Device Arp Table</a></li>
<li><a href="http://172.17.0.2/cgi-bin/mac.cgi" target="_blank">Switch MAC Table</a></li>
<li><a href="http://172.17.0.2/cgi-bin/lldp.cgi" target="_blank">lldp Neighbors</a></li>
</ul>
});