具有可空id的MVC默认路由未按预期工作

时间:2015-08-27 06:36:06

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

简单的路由方案对我不起作用。

我的路线注册看起来像这样

context.MapRoute(
                "Users_default",
                "Users/{controller}/{action}/{id}",
                new { action = "Index", id= UrlParameter.Optional });

我希望它能够满足

的要求
users/profile/
users/profile/1
users/profile/2

使用以下控制器

 public class ProfileController : Controller
    {
        public ActionResult Index(int? id)
        {
            var user = id == null ? (UserModel)HttpContext.Session["CurrentUser"] : userManager.GetUserById((int)id);
            return View(user);
        }
    }

适用于users/profile,但不适用于users/profile/1 我尝试了几件不同的东西,但我知道答案必须简单,只是我缺乏知识,我在这里缺少什么。

2 个答案:

答案 0 :(得分:1)

这是因为您的路线解释为:
 {controller: "profile", action: "1"}

您需要明确详细说明操作网址,如下所示:
users/profile/index/1

答案 1 :(得分:1)

  

我不希望索引出现。我想对users / profile / 1和users / profile /

使用相同的方法

然后不要将操作放入您的网址。

context.MapRoute(
    "Users_default",
    "Users/{controller}/{id}",
    new { action = "Index", id= UrlParameter.Optional });

您定义的路由不允许索引是可选的,因为它后跟另一个参数(在本例中为#34; id")。除了默认路由外,只有最后一个参数可以是可选的。