Приложение выполнено без чтения всей ошибки тела запроса в Kestrel, .NET Core с NGiNX

Устраняет ли компилятор во всех ограничениях типа типа при разрешении перегрузок?

Нет, поскольку общие ограничения не являются частью сигнатуры функции. Вы можете проверить это, добавив перегрузку Bar, которая идентична, за исключением общих ограничений:

interface IBar { }

static void Bar<T>(IEnumerable<T> value)
    where T : IFoo
{
}

static void Bar<T>(T source)
    where T : IBar
{
    // fails to compile : Type ____ already defines a member called 'Bar' with the same parameter types
}

Причина, по которой ваш код не компилируется, заключается в том, что компилятор выбирает «лучшее» соответствие на основе сигнатура метода , тогда пытается применить общие ограничения.

Одна из возможных причин, по которым это не , состоит в том, что этот вызов будет неоднозначным:

{предположим, что List<T> имеет метод Add<T>(IEnumerable<T> source)}

List<object> junk = new List<object>();
junk.Add(1);   // OK
junk.Add("xyzzy") // OK
junk.Add(new [] {1, 2, 3, 4});  //ambiguous - do you intend to add the _array_ or the _contents_ of the array?

Очевидное исправление заключается в использовании другого имени для метода Bar, который принимает коллекцию (as выполняется в BCL с Add и AddRange.

0
задан James Scott 16 January 2019 в 14:27
поделиться

1 ответ

Хорошо, разобрались с теми, кто может застрять с этой ошибкой. В конце концов, это никак не связано с моим NGiNX или конфигурацией докера. В моем конструкторе для моего контроллера я читал значение конфигурации, которого не было. Это вызвало исключение, из-за которого мой метод никогда не вызывался.

Таким образом, для любого, кто испытывает «Заявление выполнено без чтения всего тела запроса ...», вы можете проверить свои конструкторы на наличие проблем.

0
ответ дан James Scott 16 January 2019 в 14:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: