如何执行高级 ASP.NET MVC (3) 路由(计算操作等)
本文关键字:路由 操作 MVC 计算 ASP 何执行 执行 高级 NET | 更新日期: 2023-09-27 17:56:55
>更新
考虑以下 8 条路由,其中 Administration
是区域,控制器是EmployeesController
,Id 是EmployeeId
:
-
Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Delete
- 操作 =
DeletePhone
- 操作 =
-
Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Deactivate
- 操作 =
DeactivatePhone
- 操作 =
-
Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Activate
- 操作 =
ActivatePhone
- 操作 =
-
Administration/Corporate/{controller}/{Id}/Notes/{NoteId}/Delete
- 操作 =
DeleteNote
- 操作 =
-
Administration/Corporate/{controller}/{Id}/Files/{FileId}/Delete
- 操作 =
DeleteFile
- 操作 =
-
Administration/Corporate/{controller}/{Id}/Addresses/{AddressId}/Delete
- 操作 =
DeleteAddress
- 操作 =
-
Administration/Corporate/{controller}/{Id}/Addresses/{AddressId}/Deactivate
- 操作 =
DeactivateAddress
- 操作 =
-
Administration/Corporate/{controller}/{Id}/Addresses/{AddressId}/Activate
- 操作 =
ActivateAddress
- 操作 =
如何将其转换为:
Administration/Corporate/{controller}/{Id}/{object}/{ObjectId}/{action}
对象Phones|Notes|Files|Addresses|?
和动作Delete|Deactivate|Activate|?
的地方?
- 我需要获取对象并将其单数化(我已经有了代码)。
- 对象 =
Phones
(Phone
)
- 对象 =
- 采取行动并将其转换(重写?)为行动+对象(单数化)。
- 动作 =
Delete
+Phone
(DeletePhone
)
- 动作 =
我可以做所有事情直到第二个 #2,问题是如何将操作转换为路由定义中的其他内容?
这些甚至可能吗?把我现在的 8 条路线变成 1 条会很好。而且这个例子只用我的EmployeesController
,我的CustomersController
是这个大小的两倍,所以大约 16 条路由可以变成 1 条。这将节省大量空间和代码。
无论如何,如果可能的话,我期待着建议和想法。
您可以创建自定义路由处理程序。
public class CustomRoute : RouteBase
{
//your custom code
}
ASP.NET MVC 子域路由
我会设置一个简单的数组和方法来处理这种事情。它并不完全优雅,但应该很容易理解:
public static void RegisterRoutes()
{
var adminRoutes = new[]
{
new [] { "Phones", "PhoneId", "Delete", "DeletePhone" },
// Add the rest of your routes here.
};
foreach ( var adminRoute in adminRoutes )
{
RegisterAdminRoute( adminRoute[0], adminRoute[1], adminRoute[2], adminRoute[3] );
}
}
public static void RegisterAdminRoute( string area, string idName, string actionName, string action )
{
RouteTable.Routes.MapRoute
(
area + actionName,
String.Format( "Administration/Corporate/{{controller}}/{{Id}}/{0}/{{{1}}}/{2}",
area,
idName,
actionName ),
new { action }
);
}