C# 是否在一个控制器中使用GUID作为参数?

C# 是否在一个控制器中使用GUID作为参数?,c#,asp.net,asp.net-mvc,guid,C#,Asp.net,Asp.net Mvc,Guid,我的目标是,我仍然希望使用默认的asp.net mvcid,但我希望在这样一个控制器中使用Guid http://example.com/MyController/Index/387ecbbf-90e0-4b72-8768-52c583fc715b 这是我的路线 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home",

我的目标是,我仍然希望使用默认的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();
}
告诉我错误

参数字典包含参数“guid”的空条目 方法的不可为Null的类型“System.Guid” 'System.Web.Mvc.ActionResult索引(System.Guid)'


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

只需将参数名称从GUID更改为id即可:

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

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

使用此代码,即使在查询字符串中传递了有效的guid,也始终会将空guid绑定到id。必须为参数添加[FromQuery]属性。公共操作结果索引([FromQuery]Guid id){return View();}