MVC路由问题具有相同参数的不同名称

时间:2017-01-12 08:40:25

标签: c# model-view-controller routing

我在RoutingConfig.cs中有以下路由

        routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        // Not working why?
        routes.MapRoute(
            name: "AdminLoginRequestUrl",
            url: "{controller}/{action}/{requestUrl}",
            defaults: new { controller = "Admin", action = "Login", requestUrl= UrlParameter.Optional }
        );

问题是第二个路由无效 我在这里想念什么?有人有任何提示或想法MVC对我来说是新的

3 个答案:

答案 0 :(得分:1)

只能通过区分参数名称来创建不同的路径,两个路径都存在类似的路径。同时将自定义路线移至默认路线之上。你可以试试这个

<router-outlet></router-outlet>

您可以使用 routes.MapRoute( name: "AdminLoginRequestUrl", url: "{controller}/{action}/route2/{requestUrl}", defaults: new { controller = "Admin", action = "Login", requestUrl= UrlParameter.Optional } ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); 的任何内容来区分默认路由

答案 1 :(得分:0)

您不能通过变量名来区分路径。您可以创建更具体的路线:

    routes.MapRoute(
        name: "AdminLoginRequestUrl",
        url: "Admin/{action}/{requestUrl}",
        defaults: new { controller = "Admin", action = "Login", requestUrl= UrlParameter.Optional }
    );

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

请注意,注册顺序非常重要。

或者您可以将参数重命名为适合两个控制器的参数并使用它。

答案 2 :(得分:0)

考虑使用MapHttpAttributeRoutes(),您可以在此处阅读:https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/ 1

修改:更改链接以获得更好的文章。

然后,您可以使用属性为您的操作定义更具体的规则。

示例:

public class Admin : Controller
{
    [Route("admin/{requestUrl}")]
    public ActionResult Login(string requestUrl) { ... }
}