链接生成未在区域内和区域内创建正确的链接

时间:2018-09-08 19:03:13

标签: c# razor asp.net-core razorengine

我有一个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,但似乎没有任何效果。

问题

因此,我显然希望在不对链接进行“硬编码”的情况下正常工作,并且想知道为什么预期的行为似乎不起作用。

任何提示都值得赞赏。

1 个答案:

答案 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>

});