Asp.Net核心MVC - 路由问题

时间:2018-03-03 14:29:54

标签: asp.net-mvc routing

TL; DR;
如何在PostsController上将“http://localhost/posts/1”路由到public IActionResult Index(int? id)

半长版
我的路线定义为:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "posts",
        template: "Posts/{id:int?}",
        defaults: new { controller = "Posts", action = "Index" });
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id:int?}");
});

我的帖子控制器是:

[Route("posts")]
public class PostsController : Controller
{
    public IActionResult Index(int? id)
    {
        return View();
    }
}

问题是“http://localhost:5432/posts”工作正常但“http://localhost:5432/posts/1”确实正确路由......

编辑1:

public class PostsController : Controller
{
    [Route("Posts/{id:int?}"
    public IActionResult Index(int? id)
    {
        return View();
    }
}

有效...但我不想为每个动作处理路线......这应该是一个非常大的系统......事情可能会像这样疯狂......

1 个答案:

答案 0 :(得分:2)

由于您使用Route属性修饰了控制器,因此将不会实际使用您在路由表中定义的规则。以下是文章Routing to Controller Actions的引用:

  

操作可以是常规路由或属性路由。配售   控制器上的路由或操作使其属性路由。

因此,要解决您的问题,只需从[Route("posts")]移除PostsController属性。