Прежде чем вы прочитаете этот пост , знайте, что я уже посмотрел этот пост и ... Проблема почти такая же, и я попробовал решение.Так что этот пост не дублируется.
Мы использовали шаблон запуска ASP.NET Boilerplate.Мы разработали некоторые прикладные сервисы, которые имеют следующую структуру:
public interface IFooAppService :
IAsyncCrudAppService<FooDto, Guid, GetAllFooDto, CreateFooDto, UpdateFooDto>
// Abp.Application.Services.IAsyncCrudAppService<...>
{
}
[AbpAuthorize("Authorize.Foo")]
public class FooAppService :
AsyncCrudAppService<Foo, FooDto, Guid, FooFilterInput, CreateFooDto, FooDto>,
IFooAppService
{
private readonly BarManager _barManager;
public FooAppService(IBarManager barManager, IRepository<Foo, Guid> repository)
: base (repository)
{
_barManager = barManager;
}
public override async Task<FooDto> Create(CreateFooDto input)
{
// create with repository
}
// other overridden Actions and Foo interface implementation
}
Все соответствует имеющейся документации здесь .
Все методы работают хорошо, и яможно использовать все функции Swagger.Конфигурация вроде бы в порядке (мы добавили немного пост-JavaScript для ABP, ...) и т. Д.
Изначально у меня были следующие версии:
Microsoft.AspNetCore
: 2.0.1 Microsoft.EntityFrameworkCore
: 2.0.1 Abp.AspNetCore
: 3.6.2 Swashbuckle.AspNetCore
: 1.1.0
У нас было 385 API.
Я добавил новый AppService, Commitment, с его менеджером, Dtos и т. Д.
В тот момент, когда я запускаюсь и захожу вswagger, мой браузер вылетает и отображает сообщение, спрашивающее, хочу ли я остановить скрипт (IE, Edge, Firefox, Chrome, ...).
В режиме отладки у меня нет информации относительно возможного исключенияthrowed.
Пробовал:
Обновление Swashbuckle.AspNetCore
Пакет NuGet (все версии: 1.2, 2.X и 3.0.0)
- В версии 1.X у меня та же проблема.
- В версии 2.5 пользовательский интерфейс не отображается.
- В других версиях пользовательский интерфейс отображается,Я могу использовать все методы, КРОМЕ моих новых методов, Commitment.Когда я щелкаю его мышью, у меня появляется только вертушка ... Браузер зависает и спрашивает меня, хочу ли я остановить сценарий или подождать.
В Chrome Chrome вызывает ошибку:
Удалить переопределенные методы для обязательств.
В случае, если мой код неверен внутри переопределенных методов.
[AbpAuthorize("Authorize.Commitments")]
public class CommitmentAppService :
AsyncCrudAppService<Commitment, CommitmentDto, Guid, CommitmentFilterInput, CreateCommitmentDto, UpdateCommitmentDto>,
ICommitmentAppService
{
private readonly ICommitmentManager _commitmentManager;
private readonly IFundManager _fooManager;
private readonly ILimitedPartnerManager _barManager;
public CommitmentAppService(
ICommitmentManager commitmentManager,
IFooManager fooManager,
IBarManager barManager,
IOneRepository<Commitment, Guid> repository)
: base(repository)
{
_commitmentManager = commitmentManager;
_fooManager = fooManager;
_barManager = barManager;
_commitmentManager = commitmentManager;
}
// nothing here
}
Тот же результат.
Используйте только один DTO (CommitmentDto) вместо набора DTO CommitmentDto, CreateCommitmentDto, UpdateCommitmentDto, ...
AsyncCrudAppService<Commitment, CommitmentDto, Guid>
, где определеныОбъект, его DTO и тип PK AsyncCrudAppService<Commitment, CommitmentDto, Guid, CommitmentFilterInput>
, где определены объект, его DTO по умолчанию, тип PK и фильтр ввода DTO AsyncCrudAppService<Commitment, CommitmentDto, Guid, CommitmentFilterInput, CommitmentDto>
, где определен объект, его значение по умолчаниюDTO, тип PK, вход фильтра DTO и объект создания DTO AsyncCrudAppService<Commitment, CommitmentDto, Guid, CommitmentFilterInput, CommitmentDto, CommitmentDto>
, где определены объект, его DTO по умолчанию, тип PK, вход фильтра DTO, объект создания DTO и объект обновления DTO
Тот же результат.
Использование других реализаций AsyncCrudAppService
AsyncCrudAppService<Commitment, CommitmentDto, Guid>
, где определены объект, его DTO и тип PK AsyncCrudAppService<Commitment, CommitmentDto, Guid, CommitmentFilterInput>
гдеопределены объект, его DTO по умолчанию, тип PK и вход фильтра DTO AsyncCrudAppService<Commitment, CommitmentDto, Guid, CommitmentFilterInput, CreateCommitmentDto>
, где определены объект, его DTO по умолчанию, тип PK, вход фильтра DTO и объект создания DTO AsyncCrudAppService<Commitment, CommitmentDto, Guid, CommitmentFilterInput, CreateCommitmentDto, UpdateCommitmentDto>
где определены объект, его DTO по умолчанию, тип PK, вход фильтра DTO, объект создания DTO и объект обновления DTO
Тот же результат.
Используйте редактор для проверки Swagger (OpenApi, я знаю ...) предоставляет онлайн-редактор на https://editor.swagger.io/
Я скопировалswagger.json и вставил его в редактор.У меня есть некоторые ошибки по поводу Semantic (я думаю, что это вызвано преобразованием Json в Yaml).
Семантическая ошибка на пути.234
Семантическая ошибка в paths./api/services/app/Foo/GetAll.get.security.0.0 Определение области безопасности Funds.BankAccounts не может быть решена Перейти к строке 240
У меня нет особой ошибки для CommitmentAppService.Я могу развернуть все элементы, кроме методов Обязательства ... Браузер падает, бла-бла-бла
Переименовать Обязательство Toto
Удалить несколько методов , чтобы убедиться, что число API-интерфейсов не слишком велико дляSwagger
Импорт swagger.json в Azure API Management Я могу развернуть все методы, даже методы фиксации ... Но я не знаю, как их использовать моя база данных (и не моя цель, я хочу отладить локально).
Чистый конструктор ... Может быть, один из моих инъекцийЧто-то не так?
public CommitmentAppService(IRepository<Commitment, Guid> repository)
: base(repository)
{ /**/ }
Нет ...
Если у кого-то есть решение ...