带guid id的默认mvc 5路由

时间:2014-02-26 08:50:17

标签: asp.net-mvc-routing asp.net-mvc-5.1

我正在尝试设置mvc 5 attrribute路线,以便

https://localhost/19a6de7e-ee19-43f5-a9c9-8bbdc8dcfc5e

路由到/ home / index初始化id param,我似乎无法正确使用它。

我添加了routes.MapMvcAttributeRoutes();到默认映射路由后的注册路由

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

我尝试了很多东西,但除非完全定义路线,否则似乎无法使其工作。

有什么建议吗?

public class HomeController : Controller
{
    [Route("{id?}")]
    public ActionResult Index(Guid? id)
    {
        ViewBag.Message = id;
        return View();
    }
}

2 个答案:

答案 0 :(得分:3)

现在添加了一个内置的GuidRouteConstraint(),它更适合使用RegEx。

请参阅Differentiate Guid and string Parameters in MVC 3

答案 1 :(得分:0)

@ chrisp_68,您需要在默认路线之前放置自定义路线:

routes.MapRoute(
    name: "Just ID",
    url: "{id}",
    defaults: new { controller = "Home", action = "Index" }
);

然后,您需要创建一个以id作为参数的动作:

public ActionResult IndexID(string id) {
    ...
}

您可以考虑的另一件事是将id的值限制为guid模式:

    constraints: new { id = @"[a-f0-9-]+" }

(或者你需要的任何模式)