在阅读this post之前,请知道我已经看过这篇文章,并且...问题几乎是相同的,并且我已经尝试了解决方案。因此,此帖子不会重复。
我们使用了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
}
一切都与here上提供的文档一致。
所有方法都能正常工作,我可以使用所有Swagger功能。配置似乎还可以(我们为ABP注入了一些后JavaScript,等等)。
最初,我有以下版本:
Microsoft.AspNetCore
:2.0.1 Microsoft.EntityFrameworkCore
:2.0.1 Abp.AspNetCore
:3.6.2 Swashbuckle.AspNetCore
:1.1.0 我们有 385 个API。
我添加了一个新的AppService,承诺及其管理器,Dtos等。
那一刻,当我启动并大摇大摆时,浏览器崩溃并显示一条消息,询问我是否要停止脚本(IE,Edge,Firefox,Chrome等)。
在调试模式下,我没有任何有关引发异常的信息。
更新Swashbuckle.AspNetCore
NuGet软件包(所有版本:1.2、2.X和3.0.0)
以防我的代码在重写方法内出错。
[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并将其粘贴到编辑器中。 我对语义有一些错误(我认为这是从Json转换为Yaml引起的)。
路径中的语义错误./api/services/app/Foo/GetAll.get.responses.200.schema.$ref $ ref值必须是符合RFC3986的百分比编码URI 跳到第234行
路径./api/services/app/Foo/GetAll.get.security.0.0上的语义错误 安全范围定义Funds.BankAccounts无法解析 跳到第240行
对于CommitmentAppService,没有特殊错误。除了承诺方法,我可以展开所有项目...浏览器崩溃,等等等等
重命名对Toto的承诺
删除一些方法以验证Swagger的API数量不是太大
在Azure API管理中导入swagger.json 我可以扩展所有方法,甚至是Commitment方法...但是我不知道如何使用 my 数据库(这不是我的目标,我希望在本地调试)。
清洁构造函数 ...也许我注入的项目之一不正确?
public CommitmentAppService(IRepository<Commitment, Guid> repository)
: base(repository)
{ /**/ }
没有...
如果有人有解决方案...
答案 0 :(得分:0)
都是我的错!
我需要添加Commitment及其Dtos代码以了解我在哪里犯了错...
[Table("Commitment")]
public class Commitment : FullAuditedEntity<Guid>,
{
public string Property1 { get; set; }
public Foo Foo { get; set; }
public Guid FooId { get; set; }
}
[AutoMapFrom(typeof(Commitment))]
[AutoMapTo(typeof(Commitment), MemberList = AutoMapper.MemberList.Source)]
public class CommitmentDto : EntityDto<Guid>
{
public string Property1 { get; set; }
public Foo Foo { get; set; }
public Guid FooId { get; set; }
}
我在CommitmentDto中使用了 entity 对象,而不是Dtos ... 实际上,我需要使用FooDto
(而不是Foo
)在CommitmentDto
中。