如何在ASP.NET MVC中使用没有参数名称的自定义路由?

时间:2016-01-29 08:27:15

标签: c# asp.net asp.net-mvc asp.net-mvc-routing url-routing

我的方法有以下路线:

[HttpGet]
[Route("Company/Employees/{name}")]
public ActionResult Details(string name)

我想通过向

发出请求来访问名称属性为“John”的员工
Company/Employees/John

但是现在路线只有在我输入时才有效:

Company/Employees?name=John

我该如何解决这个问题?

修改

这是我的路线配置(在一个区域内)

context.MapRoute(
            "Company_default",
            "Company/{controller}/{action}/{id}",
            new { controller = "Employees", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "MySite.Areas.Company.Controllers" }
        );

2 个答案:

答案 0 :(得分:2)

正如我已经说过的,您的默认路线与您的自定义控制器路线具有相同的风险。 Becouse {id} param 可选

如果你想使用你的路线,你应该在你的默认路线之前在RouteConfig中定义自定义路线,并在控制器上摆脱你的Route属性:

context.MapRoute(
            "DetailsCustom",
            "Company/Employees/{name}",
            new { controller = "Employees", action = "Details"},
            namespaces: new[] { "MySite.Areas.Company.Controllers" }
        );

答案 1 :(得分:0)

在您的其他路线之前添加:

context.MapRoute(
        "Company_default",
        "Company/{controller}/{id}",
        new { controller = "Employees", action = "Index", id =    UrlParameter.Optional },
        namespaces: new[] { "MySite.Areas.Company.Controllers" }
    );

因为你的前一个正在接受" John"作为"动作"参数