1) Обратите внимание на URL-адрес: «localhost: 55828 / token» (не «localhost: 55828 / API / токен»)
2) Обратите внимание на данные запроса. Его не в формате json, его просто данные без двойных кавычек. "userName=xxx@gmail.com& password = Test123 $ & amp; grant_type = password"
3) Обратите внимание на тип содержимого. Content-Type: 'application / x-www-form-urlencoded' (не Content-Type: 'application / json')
4) Когда вы используете javascript для создания почтового запроса, вы можете использовать следующее:
$http.post("localhost:55828/token",
"userName=" + encodeURIComponent(email) +
"&password=" + encodeURIComponent(password) +
"&grant_type=password",
{headers: { 'Content-Type': 'application/x-www-form-urlencoded' }}
).success(function (data) {//...
Смотрите следующие скриншоты из Postman:
Я полагаю, что это - проблема ковариантности или контравариантности, как отмечено это сообщение форума .
См. Ковариантность и Контравариантность в C#, Части второй: Ковариантность Массива и остальная часть серия Covariance и Contravariance в блоге Eric Lippert.
, Хотя он имеет дело с Массивами в статье, я связался, я полагаю, что подобная проблема представляет себя здесь. С Вашим первым примером Вы возвращаетесь IEnumerable
, который мог содержать объекты, которые реализуют интерфейс, который является больше , чем ISomeTable
(т.е. - Вы могли поместить Черепаху в Животные IEnumerable, когда это IEnumerable может только содержать Жирафов). Я думаю причина, она работает, когда Вы возвращаетесь IQueryable
, то, потому что это большее/более широко , чем что-нибудь, что Вы могли возвратить, таким образом, Вам гарантируют это, что Вы возвращаете, Вы будете в состоянии обработать (?).
Во втором примере, OfType гарантирует, что то, что возвращается, является объектом, который хранит всю информацию, необходимую для возврата только тех элементов, которые могут быть брошены Жирафу.
я вполне уверен, это имеет некоторое отношение к проблемам безопасности типов, обрисованной в общих чертах выше, но поскольку Eric Lippert говорит Вред Функций Высшего порядка Мой Мозг , и я испытываю затруднения при выражении точно, почему это - проблема co/contravariant.
Я предполагаю, Linq к Sql не может поддерживать кастинг, когда переводят в sql оператор.
Делает это, все еще перестали работать, если Вы изменяете это:
select new SomeObject { ... } as ISomeTable;
к этому:
select (ISomeTable) new SomeObject { ... };
?
Раз так (поскольку я вижу, что Вы подтвердили), возможно, это имеет отношение к тому, что интерфейсная реализация могла быть или классом или структурой? Проблема все еще появляется, если Вы бросаете к абстрактному классу, а не интерфейсу?
Просто предположение, но как оператор может возвратить пустой указатель - таким образом, он может иметь отношение к фактической реализации эти new SomeObject { ... }
код, так как это - синтаксический сахар. return results.OfType<ISomeTable>();
фильтры на основе типа, таким образом, оператор возврата Вашего метода только возвратит тот тип (гарантирующий безопасность типов). Я столкнулся с подобной проблемой с возвратом универсальных типов.
P.S. Я люблю "Операцию, мог дестабилизировать время выполнения". исключение. Это почти похоже, "Вы могли бы аварийно завершить Интернет" исключение.
Я обнаружил, что OfType имеет неприятные побочные эффекты при использовании linq to sql. Например, части linq, которые ранее оценивались после выполнения запроса к базе данных, вместо этого были переведены в SQL. Это не удалось, поскольку в этих разделах не было эквивалента SQL. В итоге я использовал .Cast, что, похоже, тоже решило проблему.
Я нашел эту запись, когда искал собственное решение вопроса "операция может дестабилизировать время выполнения". Хотя приведенный выше совет по ковариации/контравариации выглядит очень интересно, в итоге я обнаружил, что получаю то же сообщение об ошибке, выполняя свои модульные тесты с включенным покрытием кода и установленным атрибутом сборки AllowPartiallyTrustedCallers.
Удаление атрибута AllowPartiallyTrustedCallers привело к нормальному выполнению моих тестов. Я также мог отключить покрытие кода, чтобы заставить их работать, но это не было приемлемым решением.
Надеюсь, это поможет кому-то еще, кто попал на эту страницу, пытаясь найти решение этой проблемы.