jes*_*var 8 asp.net-mvc controller prefix
有没有办法在ASP.NET MVC中更改控制器的命名约定?
我想要的是命名我的控制器InicioControlador
而不是InicioController
,或者更好的是,使用前缀而不是后缀,并具有ControladorInicio
我的控制器名称.
从我到目前为止所读到的内容来看,我认为我必须实现自己的控制器工厂.如果你们中的任何一个人能指出我正确的方向,我将非常感激.
jes*_*var 13
我决定深入挖掘并在搜索MVC源代码后找到我正在寻找的内容.控制器名称的约定深入MVC框架的根目录,特别是在两个类ControllerDescriptor
和ControllerTypeCache
.
在ControllerDescriptor
它由以下属性给出:
public virtual string ControllerName {
get {
string typeName = ControllerType.Name;
if (typeName.EndsWith("Controller", StringComparison.OrdinalIgnoreCase)) {
return typeName.Substring(0, typeName.Length - "Controller".Length);
}
return typeName;
}
}
Run Code Online (Sandbox Code Playgroud)
在ControllerTypeCache
它是通过以下方法给定:
internal static bool IsControllerType(Type t) {
return
t != null &&
t.IsPublic &&
t.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase) &&
!t.IsAbstract &&
typeof(IController).IsAssignableFrom(t);
}
public void EnsureInitialized(IBuildManager buildManager)
{
if (_cache == null)
{
lock (_lockObj)
{
if (_cache == null)
{
List<Type> controllerTypes = TypeCacheUtil.GetFilteredTypesFromAssemblies(_typeCacheName, IsControllerType, buildManager);
var groupedByName = controllerTypes.GroupBy(
t => t.Name.Substring(0, t.Name.Length - "Controller".Length),
StringComparer.OrdinalIgnoreCase);
_cache = groupedByName.ToDictionary(
g => g.Key,
g => g.ToLookup(t => t.Namespace ?? String.Empty, StringComparer.OrdinalIgnoreCase),
StringComparer.OrdinalIgnoreCase);
}
}
}
Run Code Online (Sandbox Code Playgroud)
是的,ControllerFactory是您问题的最佳解决方案.
public IController CreateController(RequestContext requestContext, string controllerName)
{
BaseController controller;
switch (controllerName.ToLower())
{
case "product": case "products": controller = new MyProductController(); break;
case "home": controller = new MyHomeController(); break;
case "account": controller = new MyAccountController(); break;
default: controller = null; break;
}
return controller;
}
Run Code Online (Sandbox Code Playgroud)
这是我的第一个ControllerFactory - 但它非常愚蠢:)你必须使用反射并避免这个丑陋的开关.
归档时间: |
|
查看次数: |
4900 次 |
最近记录: |