在控制器上使用属性路由迫使我管理所有路由

Using attribute routing on a controller is forcing me to manage all routes

我刚刚开始掌握 Asp.net 核心,我正在尝试建立一个基本站点。

我想在子目录下建立一个管理面板。

我有一个由 EF crud 功能构建的简单控制器。

所以从示例来看,我似乎应该能够向控制器添加一个 [Route()] 属性,它会为所有内容添加前缀。像这样:

[Route("Admin/Subfolder/[controller]")]
public class EventsController : Controller
{
}

但是当我这样做时,我只收到一个错误页面,上面写着 "multiple actions matched",它列出了索引、详细信息、创建等。

如果我然后通过每个方法并在其上放置一个 [Route()] 属性,我可以让它工作,但这似乎与文档不一致。

感觉我应该能够只为控制器路由添加一个前缀,而不必接管控制器内每条路由的管理。举个例子,POSTS 现在不工作了,我不确定路由属性的格式应该是什么。

我做错了什么?

你做得对。可以在控制器级别应用默认路由属性。 “在控制器上放置路由属性会使控制器中的 all 操作使用属性路由。” 你能 post 你的控制器的完整代码吗?里面肯定还有别的事情发生。确保对具有相同名称的操作使用 HttpPost/HttpGet 属性,如下所示:

[Route("Admin/Subfolder/[controller]")]
public class EventsController : Controller
{
    [HttpGet]
    public IActionResult NewEvent()
    { }

    [HttpPost]
    public IActionResult NewEvent()
    { }
}

可以找到关于路由的很好的解释here