在控制器方法中使用DTO作为参数时,Swagger无法生成模式

fgw7neuy  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(155)

我有一个API控制器MemberController
x1c 0d1x的数据
我在项目的Models文件夹中有一个Member模型类:

public class Member
{
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string Phone { get; set; } = string.Empty;
    public string Mobile { get; set; } = string.Empty;
    public DateTime DateOfBirth { get; set; } = DateTime.MinValue;
    public MemberType MemberType { get; set; } = MemberType.Player;
    public MemberStatus MemberStatus { get; set; } = MemberStatus.Created;
    public DateTime RegistrationDate { get; set; } = DateTime.UtcNow;
}

字符串
我在项目的ApiModel文件夹中还有一个view model / Dto类:

namespace bengalfc.API.ApiModel
{
    public class CreateMember
    {
        [Required]
        public string FirstName { get; set; }
        [Required]
        public string LastName { get; set; }
        [Required]
        public string Email { get; set; }
        [Required]
        public string Password { get; set; }
    }
}


我在我的项目中使用Entity Framework来更新数据库结构。
Member模型是我的Member表在数据库中的反映。最初,当使用Member模型作为CreateMember方法的参数时,我得到了一个错误,说某些字段是必需的,我不想通过使用数据注解来解决这个错误,而是选择在ApiModel文件夹中创建一个名为CreateMember的DTO或视图模型。
到目前为止,我的Swagger可以完美地加载API文档,但是当我开始在CreateMember方法中使用CreateMember模型时;斯瓦格抱怨道
SwaggerGeneratorException:无法为类型-bengalfc. API. Models. CreateMember生成架构。
在这种情况下,如何在控制器操作中使用视图模型或DTO,或者对于这种场景,什么是理想的解决方案?

q3qa4bjr

q3qa4bjr1#

在属性类datatype之前使用[FromBody],如下面的代码所示,它可以帮助您创建swagger文档。

[HttpPost("members")]
    [Produces("Application/json")]
    public ActionResult CreateMember([FromServices] IMemberservice memberService, [FromBody] CreateMember InP)
    {
        var Result = memberService.CreateBusinessActionforprocess(InP);
        return Ok(Result);
    }

字符串
如上所示,不需要从.Net Core 5创建构造函数和注入接口,您可以使用[FromServices]。如果您在PUT方法中使用Route参数,则可以使用[FromRoute],如下所示

public ActionResult CreateMember([FromRoute] int memberId, [FromBody] Member InP)

相关问题