Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何执行高级ASP.NET MVC(3)路由(计算操作等)?_C#_Asp.net Mvc_Asp.net Mvc 3_Routing_Routes - Fatal编程技术网

C# 如何执行高级ASP.NET MVC(3)路由(计算操作等)?

C# 如何执行高级ASP.NET MVC(3)路由(计算操作等)?,c#,asp.net-mvc,asp.net-mvc-3,routing,routes,C#,Asp.net Mvc,Asp.net Mvc 3,Routing,Routes,已更新 考虑到以下8条路线,管理为区域,控制员为员工控制员,Id为员工Id: Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Delete 操作=DeletePhone Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Deactivate action=DeactivatePhone Administration/Corporate/{contr

已更新

考虑到以下8条路线,
管理
区域控制员
员工控制员
Id
员工Id

  • Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Delete
    • 操作=
      DeletePhone
  • Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Deactivate
    • action=
      DeactivatePhone
  • Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Activate
    • action=
      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}/{ObjectId}/{action}
    其中object
    phone | Notes | Files | address | |
    action
    删除|停用|激活|

  • 我需要取对象并对其进行奇点化(我已经有了代码)。
    • 对象=
      电话
      电话
  • 采取行动并将其转换(重写?)为行动+对象(奇点化)。
    • 操作=
      删除
      +
      电话
      删除电话
  • 我可以做到第二个#2的所有事情,问题是如何将操作转换为路由定义中的其他内容

    这些都有可能吗?如果能把我现在拥有的8条路线变成1条,那就太好了。本例仅使用my
    EmployeesController
    ,my
    CustomerController
    的大小是该大小的两倍,因此大约有16条路由可以转换为1条。这将节省大量的空间和代码


    不管怎样,如果可能的话,我期待您的建议和想法。

    您可以创建自定义路由处理程序

    public class CustomRoute : RouteBase
    {
        //your custom code
    }
    

    我会设置一个简单的数组和方法来处理这种事情。它并不十分优雅,但应该很容易理解:

    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 }
            );
    }
    

    我喜欢那不祥的空身体。