在控制器上使用属性路由迫使我管理所有路由
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
我刚刚开始掌握 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