2016-12-28 99 views
3

我正在使用ASP.NET Core。惯例是路由系统认为FooController类是名为Foo的控制器。如何覆盖ASP.NET Core的控制器命名约定?

我需要重写这个约定。我想要做这样的事情:

[ControllerName("Bar")] 
public class SomeArbitraryName : Controller { 
} 

或者这样:

public class SomeArbitraryName : Controller("Bar") { 
} 

这有可能以某种方式?

编辑:没有链接“重复”的问题不适用于ASP.NET核心!

+0

在'Startup'类中使用路由。 – pwas

+0

[如何更改URL中的ASP.NET MVC控制器名称?]的可能重复(http://stackoverflow.com/questions/33344450/how-to-change-asp-net-mvc-controller-name-in-url ) –

+0

无论你想要什么,你都可以命名你的控制器类型。假设你注册了默认路由,'/ SomeArbitraryName'可以正常工作(而'RouteData'中的'controller'标记将是“SomeArbitraryName”)。 – haim770

回答

3

属性路由仍然存在Asp.Net核心

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

Documentation: Routing to Controller Actions - Attribute Routing

+0

谢谢@ haim770添加链接时,你为我做了。 – Nkosi

+0

这里的问题是,如果我有一个行动'[Route(“Bar/edit”)] public void IActionResult edit(int id)'那么它不会正确路由...它实际上将路由到'Bar' 'Bar/edit' ... – grokky

+0

或者覆盖动作路由'[Route(“/ Bar/edit”)]'或者从动作路由中删除栏,以便它继承控制器的前缀。 – Nkosi

0

你可以实现自己的System.Web.Mvc.IControllerFactory,并在应用程序初始化步骤某些时候做ControllerBuilder.Current.SetControllerFactory(new MyImpl())

编辑:这建议适用于ASP.NET MVC 5和Core可能有类似的东西,不同的接口

+0

OP在询问Asp.Net Core。此外,ControllerBuilder负责构建已知的控制器(完成路由后)。这不是这里需要的。 – haim770

+0

@ haim770你似乎是对的。我想我需要与核心玩:) –