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

时间:2015-01-17 23:08:14

标签: c# model-view-controller

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

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"我希望每个操作都有一个更具描述性的var名称。

我能够让它发挥作用。但不确定这是最佳做法还是正确方法。

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

1 个答案:

答案 0 :(得分:1)

为RouteConfig.cs文件中的每个Edit操作定义路径:

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