在ASP.NET核心MVC路由“MyWebsite / {id}”未命中

时间:2017-04-03 10:23:04

标签: c# asp.net asp.net-mvc asp.net-core

我在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也应该点击它

2 个答案:

答案 0 :(得分:1)

template: "{controller=Home}/{action=Index}/{id?}" 表示如果未指定控制器和操作(仅限 Localhost:XXXX 等基本网址),请转到名为的控制器主页和名为索引的操作和 ID 可以是可选的。如果要在Home控制器中将值作为Id传递给Index方法,则必须::

  1. 将您的网址更改为Localhost:XXXX / Home / Index / 1
  2. [Route("id?")] 的索引方法上添加路径属性,您将能够获得所需的结果。这可能会破坏默认路由

答案 1 :(得分:0)

感谢@BrianMains和@McKabue的提示,我想出了一个解决方案

[Route("{id:int}")]
public IActionResult IdRoute(int id)
{
    ....
}

这样就不会破坏默认路线