Почему MVC игнорирует методы контроллера в унаследованных контроллерах? - PullRequest
0 голосов
/ 11 февраля 2019

... что на самом деле может и не быть вопросом, но это то, что мне кажется сейчас.

У меня есть структура контроллера, которая имеет несколько уровней наследования.Базовый контроллер - тот, который реализует Контроллер и имеет метод с именем Create(Guid var1, DateTime? var2) и называется как /MyDomain/Create/00000-0000-0000-000000.

В настоящее время я пытаюсь реализовать метод в контроллере ниже в дереве наследования с помощьюподпись Create(), которая принимает параметр QueryString.(/MyDomain/Create?otherVar=somevalue) Однако ASP.NET решает, что это недопустимо в качестве «конечной точки», и выдает сообщение об ошибке, говорящее The parameters dictionary contains a null entry for parameter 'var1' of non-nullable type 'System.Guid' for method 'System.Web.Mvc.ActionResult Create(System.Guid, System.Nullable`1[System.DateTime])'

Я действительно не знаю, что здесь происходит.Если я пытаюсь вызвать другой метод на том же контроллере (с уникальным именем, которое не используется выше в стеке наследования, например, /MyDomain/DifferentMethod), он работает без проблем.

Приходит мой google-fuвкратце об этой проблеме.

1 Ответ

0 голосов
/ 11 февраля 2019

Итак, у вас есть что-то вроде:

public abstract class BaseController{

 [HttpGet]
 public IActionResult Create(Guid var1, DateTime var2){..
}

и

public class SomeClassController : BaseController{
 [HttpGet]
 public IActionResult Create(){..
}

Проблема в том, что у вас не может быть 2 маршрутов с одинаковыми именами и разными сигнатурами.Это потому, что маршрутизация точно не знает, куда вы хотите перейти: с URL '/ blalbalba / Create /', который вам нужен?Базовый класс или унаследованный один раз?Это не так очевидно.

PS взгляните на этот ответ:

Неоднозначные методы действия ASP.NET MVC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...