不同控制器中具有不同参数名称的 MVC 路由

MVC Routing with Different Param Name in different Controller

我希望 MVC 能够处理以下两个 url

http://www.com/Author/Edit/1

http://www.com/Editor/Edit/2

在我的 AuthorController 中我有一个方法:

AuthorController.cs
public void Edit(int AuthorId) {
}

 EditorController.cs
 public void Edit(int EditorId) {
 }

这可能吗?如果可以,我该如何设置路由配置来处理这个问题?

此默认路由有 "id" 我想要每个操作的更具描述性的变量名称。

我能够让它工作。但不确定这是最佳实践还是正确方法。

我所做的是在路由配置中创建两个新条目来处理不同的变化。

为 RouteConfig.cs 文件中的每个编辑操作定义路由:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "AuthorEdit",
            url: "author/edit/{AuthorId}",
            defaults: new { controller = "AuthorController", action = "Edit"                    },
            constraints: new { AuthorId= "\d+" }
        );

        routes.MapRoute(
        name: "EditorEdit",
        url: "editor/edit/{EditorId}",
        defaults: new { controller = "EditorController", action = "Edit" },
        constraints: new { EditorId= "\d+" }
    );

或者如果你想使用属性路由,修改RouteConfig.cs文件:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // Enable attribute routing
        routes.MapMvcAttributeRoutes();

在控制器中:

AuthorController.cs
[Route("author/edit/{AuthorId}")]
public void Edit(int AuthorId) {
}

 EditorController.cs
[Route("editor/edit/{EditorId}")]
 public void Edit(int EditorId) {
 }