Маршрутизация MVC дает исключение ссылки на объект

Для .NET Core 2.1 у меня есть следующие настройки маршрутов;

 app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default_id",
                    template: "{controller=Home}/{action=Index}/{id?}");

            });

И следующий контроллер;

 public async Task<ActionResult> Index(Guid id = default(Guid)){
 }

Если я получаю доступ, как;

http://localhost.example.com:5002/Users/Index/09e3eca9-6c66-09ed-701e-aa26dfab3dd2?Title=Adam

работает нормально, но следующая ошибка:

http://localhost.example.com:5002/Users/Index/

NullReferenceException: ссылка на объект не указывает на экземпляр объекта.

Моя настройка не разрешает действие индекса без параметров.

Я что-то упустил здесь?

PS: я не хочу использовать атрибуты Controller/Action. Если возможно, я хотел бы решить это в Startup.cs

Не ответ, но при поиске я нашел это: https://github.com/aspnet/Mvc/issues/7518

Вроде проблема решена, но у меня все равно такая же проблема.


person Teoman shipahi    schedule 06.07.2018    source источник
comment
Ваш первый маршрут помечает параметр id как вариант (используя /{id?}), поэтому ваш второй маршрут немного бессмысленен - ​​он никогда не будет выполнен   -  person    schedule 06.07.2018
comment
@StephenMuecke, да, я это заметил. Я просто пробовал случайные вещи, чтобы заставить его работать, и скопировал вставку из этого кода. Я удалю это.   -  person Teoman shipahi    schedule 06.07.2018
comment
Вы пробовали Index([FromRoute] Guid? id). При использовании структур в качестве параметров гораздо лучше использовать версии с нулевым значением и проверять .HasValue, а не использовать default(T).   -  person khellang    schedule 06.07.2018


Ответы (1)


Мне не удалось ничего найти в документации по ASP.Net Core, но просмотрев Документация по ASP.NET Web API 2, а также этот Учебное пособие, я думаю, вам нужно использовать один из следующих двух вариантов:

[Route("Home/Index/{id:Guid?}")]
public async Task<ActionResult> Index(Guid id = default(Guid))
{
}

[Route("Home/Index/{id:Guid=default(Guid)}")]
public async Task<ActionResult> Index(Guid id)
{
}
person Hooman Bahreini    schedule 06.07.2018