在一个控制器中使用 GUID 作为参数?

Use GUID as parameter in one controller?

我的目标是我仍然想使用默认的 asp.net mvc id 但我想像这样在一个控制器中使用 Guid

http://example.com/MyController/Index/387ecbbf-90e0-4b72-8768-52c583fc715b

这是我的路线

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

现在我的控制器

public ActionResult Index(Guid guid)
{
return View();
}

给我错误

The parameters dictionary contains a null entry for parameter 'guid' of non-nullable type 'System.Guid' for method 'System.Web.Mvc.ActionResult Index(System.Guid)'

我猜是因为我在路线中有ID?如何在一个控制器中使用 GUID 作为参数,但在应用程序的其余部分(默认)使用 id

只需将参数名称从 guid 更改为 id

public ActionResult Index(Guid id)
{
    return View();
}

绑定操作时,ASP.NET MVC 检查操作方法的类型和名称,并将它们映射到请求提供的参数。由于在路由中使用术语 id,因此您必须相应地命名操作的参数。