我在Visual Studio 2017 RTM中使用ASP.NET Core MVC 1.1。我的路线配置在
之下app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
我的HomeController/Index
操作看起来像下面的
public async Task<IActionResult> Index(int? id)
localhost
网址正好Index
操作,ID为null
。但是当我输入localhost/5
时,它不会触及此操作,而是会出现404错误。直觉上这真的令人沮丧我认为如果localhost
点击索引,那么localhost/5
也应该点击它
答案 0 :(得分:1)
template: "{controller=Home}/{action=Index}/{id?}"
表示如果未指定控制器和操作(仅限 Localhost:XXXX 等基本网址),请转到名为的控制器主页和名为索引的操作和 ID 可以是可选的。如果要在Home控制器中将值作为Id传递给Index方法,则必须::
[Route("id?")]
的索引方法上添加路径属性,您将能够获得所需的结果。这可能会破坏默认路由答案 1 :(得分:0)
感谢@BrianMains和@McKabue的提示,我想出了一个解决方案
[Route("{id:int}")]
public IActionResult IdRoute(int id)
{
....
}
这样就不会破坏默认路线