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();
}
}
有效...但我不想为每个动作处理路线......这应该是一个非常大的系统......事情可能会像这样疯狂......
答案 0 :(得分:2)
由于您使用Route
属性修饰了控制器,因此将不会实际使用您在路由表中定义的规则。以下是文章Routing to Controller Actions的引用:
操作可以是常规路由或属性路由。配售 控制器上的路由或操作使其属性路由。
因此,要解决您的问题,只需从[Route("posts")]
移除PostsController
属性。