C# 如何覆盖ASP.NET核心&x27;s控制器命名约定?

C# 如何覆盖ASP.NET核心&x27;s控制器命名约定?,c#,asp.net,asp.net-mvc,asp.net-core,asp.net-core-mvc,C#,Asp.net,Asp.net Mvc,Asp.net Core,Asp.net Core Mvc,我正在使用ASP.NET内核。约定是路由系统将FooController类视为名为Foo的控制器 我需要推翻这个惯例。我想这样做: [ControllerName("Bar")] public class SomeArbitraryName : Controller { } public class SomeArbitraryName : Controller("Bar") { } 或者像这样: [ControllerName("Bar")] public class SomeArbitra

我正在使用ASP.NET内核。约定是路由系统将
FooController
类视为名为
Foo
的控制器

我需要推翻这个惯例。我想这样做:

[ControllerName("Bar")]
public class SomeArbitraryName : Controller {
}
public class SomeArbitraryName : Controller("Bar") {
}
或者像这样:

[ControllerName("Bar")]
public class SomeArbitraryName : Controller {
}
public class SomeArbitraryName : Controller("Bar") {
}
这有可能吗


编辑:不,链接的“重复”问题不适用于ASP.NET Core

您可以在应用程序初始化步骤的某个点实现自己的
System.Web.Mvc.IControllerFactory
和do
ControllerBuilder.Current.SetControllerFactory(new MyImpl())


编辑:此建议适用于ASP.NET MVC 5,对于ASP.NET Core中仍然存在的类似属性路由,Core可能有不同的接口

[Route("Bar")]
public class SomeArbitraryName : Controller
{
    // ...
}

请参见
启动
类中的

使用路由。您可以根据需要命名控制器类型。假设您注册了默认路由,
/someArricryName
可以正常工作(并且
RoutedData
中的
controller
令牌将是“someArricryName”)。这就是路由前缀for@haim770不,我不想要“任意的名字”,我想要“酒吧”。OP询问的是Asp.Net核心。另外,
ControllerBuilder
负责构造已知的控制器(完成布线后)。这不是这里需要的。@haim770似乎你是对的。我想我需要玩一下Core:)谢谢@haim770在你为我做链接时添加了链接。这里的问题是,如果我有一个动作
[Route(“Bar/edit”)]public void IActionResult edit(int id)
,那么它就不能正确路由。。。实际上,它将路由到
Bar
,而不是
Bar/edit
…或者覆盖动作路由
[路由(“/Bar/edit”)]
,或者从动作路由中删除Bar,以便它从控制器继承前缀。