swagger Spring扣,AspNetCore< example>不适合我

u7up0aaq  于 2022-11-23  发布在  Spring
关注(0)|答案(1)|浏览(159)

我尝试使用标记设置示例,但是它不适合我。我使用的是Swashbuckle.AspNetCore库。
下面是一些代码示例,
1.将以下内容添加到我的csproj. file中

<GenerateDocumentationFile>true</GenerateDocumentationFile>
  1. Program.cs
builder.Services.AddSwaggerGen(options =>
            {
                options.OperationFilter<SwaggerDefaultValues>();
                var filePath = Path.Combine(System.AppContext.BaseDirectory, "My.xml");
                options.IncludeXmlComments(filePath);

            });

1.控制器看起来像,

[Authorize]
[ApiController]
[ApiVersion("1.0")]
[Route("[controller]")]
[Route("v{version:apiVersion}/[controller]")]
[Produces("application/json")]
public class MyController : ControllerBase
{
}

1.我的方法看起来像,

/// <summary>
    /// Method to Post an Incident
    /// </summary>
    /// <param name="initiateRequest" example="FORM_CODE"></param>
    [ProducesResponseType(typeof(InitiateResponseDTO), StatusCodes.Status201Created)]
    [ProducesResponseType(typeof(ExceptionDetails), StatusCodes.Status400BadRequest)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    [ProducesResponseType(StatusCodes.Status500InternalServerError)]
    [HttpPost]
public async Task<ActionResult<InitiateResponseDTO>> PostAsync(MyRequest myRequest)
    {
//Logic

        return StatusCode(StatusCodes.Status201Created, InitiateResponseDTO);
    }
  1. MyDTO看起来像,
/// <summary>
/// Initiate Response DTO
/// </summary>
public class InitiateResponseDTO
{
    /// <summary>
    /// IncidentId 
    /// </summary>
    /// <example>985769890</example>
    public int IncidentId { get; set; }
}

1.例外详细资料类

/// <summary>
    /// Exception Details class
    /// </summary>
    public class ExceptionDetails
    {
        /// <summary>
        /// HTTP status code for the exception.
        /// </summary>
        /// <example>400</example>
        public int StatusCode { get; set; } = (int)HttpStatusCode.InternalServerError;

        /// <summary>
        /// (Friendly) message about the exception.
        /// </summary>
        /// <example>Invalid form code supplied: FORM_CODE</example>
        public string Message { get; set; } = "An error occured";

        /// <summary>
        /// Error code for the returned error.
        /// </summary>
        /// <example>UNKNOWN_FORM</example>
        public string ErrorCode { get; set; } = ErrorCodes.Generic;

        /// <summary>
        /// Exception Target denoting the method in which the error occurred.
        /// </summary>
        /// <example>MoveNext <- Method name from which the error occurred</example>
        public string? Target { get; set; }

        /// <summary>
        /// InnerError message denoting the StackTrace.
        /// </summary>
        /// <example> Some Sample</example>
public string? InnerError { get; set; }
}

仍然在SwaggerUI中,我看不到示例值,

配置有什么不正确的地方吗?我使用的是Swashbuckle.AspNetCore 6.4.0

xe55xuns

xe55xuns1#

一个简单的选项是使用[DefaultValue]修饰属性

/// <summary>
/// Initiate Response DTO
/// </summary>
public class InitiateResponseDTO
{
    /// <summary>
    /// IncidentId 
    /// </summary>
    /// <example>985769890</example>
    [DefaultValue(985769890)]
    public int IncidentId { get; set; }
}

根据项目中序列化的完成方式,它应该可以工作。
您也可以查看Swashbuckle.AspNetCore.Filters Nuget库来根据需要设置示例,但这需要更多的工作:https://github.com/mattfrear/Swashbuckle.AspNetCore.Filters#automatic-annotation

相关问题