2

我正在尝试设置一个 mvc 5 属性路由,以便

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

路由到 /home/index 初始化 id 参数,我似乎无法完全正确。

我添加了 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();
    }
}
4

2 回答 2

3

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

请参阅区分 MVC 3 中的 Guid 和字符串参数

于 2015-07-06T10:35:08.477 回答
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-]+" }

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

于 2014-03-25T17:14:11.240 回答