C# 如何覆盖ASP.NET核心&x27;s控制器命名约定?
我正在使用ASP.NET内核。约定是路由系统将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
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
和doControllerBuilder.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,以便它从控制器继承前缀。