MVC核心:在未指定“索引”的情况下浏览“资产”时,不会触发默认索引操作

时间:2019-07-29 08:00:13

标签: c# asp.net-mvc

我有两个URL,两个URL都应解析到同一页面。一个不返回404

http://localhost:xxx/Assets = 404未找到

http://localhost:xxx/Assets/Index =可以正常工作

这是我的索引操作:

[HttpGet]
public IActionResult Index()
{

    var vm = new AssetsIndexModel()
        {
          /* snipped, not important */
        };

    return View(vm);
}

这是我在Startup.cs中的唯一路线:

app.UseMvc(routes =>
{
    routes.MapRoute("default", "{Controller}/{Action}/{id?}", defaults: new { Controller = "Home", Action = "Index" });
});

这是解决此问题的唯一措施。同一控制器中的所有其他动作均可正确解决。另外,如果我只是浏览“ / Home”,我的Home / Index路由也可以工作。我可以在此处省略“ / Index”,但不能在“资产”控制器中省略。

有人对我可能忽略的东西有任何想法吗?

编辑: 另外,我使用以下代码创建指向Index操作的链接

<a asp-controller="Assets" asp-action="Index">Manage Assets</a>

这会产生“ / Assets”,因此MVC似乎理解它可以省略“索引”,但是该链接不起作用并返回404。

1 个答案:

答案 0 :(得分:0)

我发现了另一个问题(起初似乎并不相关)后找到了答案。

在我的HomeController中,添加了如下操作:

[HttpGet("{assetId}")]
    public IActionResult AssetDetail(Guid assetId)
    {
        return View();
    }

这是问题所在。我想任何地方的行动都可以解决这个问题。将上面的路线更改为此可以解决:

[HttpGet("Detail/{assetId}")]