是否可以在MVC3中在运行时添加路由?

Imr*_*uch 5 c# routes asp.net-mvc-3


我正在为MVC3创建一个项目以及一个本地大学的C#.要求是在浏览器中输入www.mysite.com/teachercode之类的内容时显示教师资料.

我在我的教师控制器类中创建了一个方法ShowTeacher.我的计划是在应用程序启动时查找数据库,并且每个教师注册相同的路由,如下所示,这将进一步处理请求,这种方法是否正确?

foreach(Teacher tch in TeacherCollection)
routes.MapRoute(
            "Teacher route" + tch.Id,
            tch.TeacherCode,
            new { controller = "Teacher", action = "ShowTeacher" }
        );
Run Code Online (Sandbox Code Playgroud)

其次,如果在数据库中添加了新教师,是否可以在教师保存后立即添加路线?

提前致谢

Ric*_*ett 5

您不需要在运行时添加路径,而是可以设置一条路线来捕获www.mysite.com/teachercode形式的URL ,只要您的教师代码与您的任何控制器都没有相同的名称. .

RegisterRoutes,添加另一条路径(需要是第一条路线),它将路径查询路由到您的ShowTeacher行动方法TeacherController,以及路线约束.

routes.MapRoute(
    "Teacher route", // route name
    "{teacherCode}", // url
    new { controller = "Teacher", action = "ShowTeacher" }, // defaults
    new { teacherCode = @"[A-Za-z]{1,10}" } // constraints
    );
Run Code Online (Sandbox Code Playgroud)

此示例中的约束 - @"[A-Za-z]{1,10}"指定教师代码仅包含大写或小写字母,长度在1到10个字符之间.您可以根据自己的需要进行调整.