猿问

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

我有两个 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”,但不能在我的资产控制器中省略。


有谁知道我可能会忽略什么?


编辑:此外,我使用以下代码创建索引操作的链接


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

这会生成“/Assets”,因此 MVC 似乎知道它可以省略“Index”,但该链接不起作用并返回 404。


智慧大石
浏览 78回答 1
1回答

翻阅古今

我在发现另一个问题(乍一看似乎无关)后找到了答案。在我的 HomeController 中,添加了一个操作,如下所示:[HttpGet("{assetId}")] &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IActionResult&nbsp;AssetDetail(Guid&nbsp;assetId) &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;View(); &nbsp;&nbsp;&nbsp;&nbsp;}这就是问题所在。我想任何地方的任何行动都解决了这个行动。将上面的路线更改为此解决了它:[HttpGet("Detail/{assetId}")]
随时随地看视频慕课网APP
我要回答