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

Asp.net core 在控制器上使用属性路由迫使我管理所有路由,asp.net-core,attributerouting,Asp.net Core,Attributerouting,我刚刚开始掌握Asp.net核心,我正在尝试建立一个基本网站 我想在一个子目录下建立一个管理面板 我有一个简单的控制器,它是由EF crud特性搭建的 因此,从示例来看,我应该能够向控制器添加一个[Route()]属性,它将为所有内容添加前缀。大概是这样的: [Route("Admin/Subfolder/[controller]")] public class EventsController : Controller { } 但当我这样做的时候,我只会得到一个错误页面,上面写着“多个动作匹

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

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

我有一个简单的控制器,它是由EF crud特性搭建的

因此,从示例来看,我应该能够向控制器添加一个
[Route()]
属性,它将为所有内容添加前缀。大概是这样的:

[Route("Admin/Subfolder/[controller]")]
public class EventsController : Controller
{
}
但当我这样做的时候,我只会得到一个错误页面,上面写着“多个动作匹配”,它列出了索引、细节、创建等等

如果我检查每个方法并在其上添加
[Route()]
属性,我就可以让它工作,但这似乎与文档不符

感觉上,我应该能够只向控制器路由添加前缀,而不必接管控制器内每个路由的管理。举个例子,这些帖子现在不起作用,我不确定它们的route属性的格式应该是什么


我做错了什么?

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

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

    [HttpPost]
    public IActionResult NewEvent()
    { }
}

有关路由的详细说明,请参见

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

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

    [HttpPost]
    public IActionResult NewEvent()
    { }
}

关于路由的详细说明,请参见

谢谢,从您的评论中,我已经了解到这一点。我需要对每个操作执行类似于
[HttpGet(“Edit/{id}”)]
[HttpPost(“Edit/{id}”)]
的操作。我现在明白了,文档中确实明确指出,如果我在任何事情上使用属性路由,那么就必须对所有事情都使用属性路由。我认为它仍然会根据名称选择一个合理的默认值。我现在意识到我实际上可以使用
[HttpGet(“[action]/{id}”)]
,但是我仍然很失望,如果我不指定它,它不能仅仅从action名称和参数中找到它。谢谢你,从你的评论中我已经找到了这个工作。我需要对每个操作执行类似于
[HttpGet(“Edit/{id}”)]
[HttpPost(“Edit/{id}”)]
的操作。我现在明白了,文档中确实明确指出,如果我在任何事情上使用属性路由,那么就必须对所有事情都使用属性路由。我认为它仍然会根据名称选择一个合理的默认值。我现在意识到我实际上可以使用
[HttpGet(“[action]/{id}”)]
,但如果我不指定它,它还不能从action名称和参数中找到它,我仍然感到失望。