Гид не обнуляется. Например, вы не можете сделать это
Guid myGuid = null; // invalid
Однако в C # 2 был добавлен некоторый синтаксический сахар, чтобы сделать типы значений обнуляемыми (оборачивая их в объект Nullable), например так:
Guid? myGuid = null; // valid. myGuid will be Nullable<Guid>.
Учитывая это правило, давайте посмотрим на ваш маршрут:
routes.MapRoute(
"Default", "{controller}/{action}/{id}",
new { controller = "somecontroller",
action = "Index",
id = UrlParameter.Optional // <-- Optional!!
});
Поскольку вы указали в своем маршруте, что параметр id
является необязательным, вы должны использовать тип, который может быть null
, или , вы должны полностью опустить параметр в своем действии. Поэтому, чтобы исправить свое действие, вам нужно изменить параметр Guid id
на Guid? id
, и он должен работать. После этого вы можете проверить значение, чтобы убедиться, что оно не равно нулю, например:
public ActionResult Index(Guid? id) {
if (id.HasValue) {
// it's not null, so I can call "id.Value" to get the Guid
}
}