Ответ 1
A Guid не имеет значения NULL. Например, вы не можете этого сделать
Guid myGuid = null; // invalid
Однако в С# 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
, и он должен работать. После этого вы можете проверить значение, чтобы убедиться, что оно не равно null:
public ActionResult Index(Guid? id) {
if (id.HasValue) {
// it not null, so I can call "id.Value" to get the Guid
}
}