当前位置: 首页 > 知识库问答 >
问题:

大摇大摆显示不正确的查询参数

衡建中
2023-03-14

我有这个控制器和操作方法

[ApiController]
[Route("api/[controller]")]
public class AppointmentController : ControllerBase
{        
    [Route("{provider}/AvailableSlots")]
    [HttpGet]        
    public Task<AvailableSlotsResponse> GetAvailableSlots(Request<AvailableSlotsRequest> request)
    {
        return null;
    }
}

下面是模型:

    public class Request<T> where T : class
    {
        [FromRoute]
        public string Provider { get; set; }
        [FromQuery(Name = "")]
        public T Model { get; set; }
    }

    public class AvailableSlotsRequest
    {
        //[FromQuery(Name = "Location")] //Would prefer not to have to use this
        public string Location { get; set; }
    }

我需要使用<code>Location</code>作为URL中的查询参数名称,以便按预期到达endpoint。

例如< code > http://localhost/API/Appointment/Company/available slots?位置=SYD

然而,当我查看Swagger页面时,该参数被称为<code>Model。位置,这让我的API的消费者感到困惑:

我可以使用< code >[from query(Name = " Location ")]来强制Swagger显示< code>Location,但是这感觉非常多余,并且重复了属性名。

这是我在配置服务()中设置的Swagger:

services.AddSwaggerDocument(document =>
            {
                document.PostProcess = d =>
                {
                    d.Info.Version = Configuration["APIVersion"];
                    d.Info.Title = $"{Configuration["ApplicationName"]} {Configuration["DomainName"]} API";
                };
            });

如何让Swagger显示< code >位置而不是< code >型号?Location,而不必在< code>[FromQuery]属性中重复单词“Location”?

共有2个答案

陈斌
2023-03-14

不幸的是,我不得不使用[FromQuery(Name=“

然而,我找到了一个更好的方法:

[ApiController]
[Route("api/[controller]")]
public class AppointmentController : ControllerBase
{        
    [Route("{provider}/AvailableSlots")]
    [HttpGet]        
    public Task<AvailableSlotsResponse> GetAvailableSlots(AvailableSlotsRequest request)
    {
        return null;
    }
}

public class Request
{
    [FromRoute]
    public string ProviderName { get; set; }
}

public class AvailableSlotsRequest : Request
{
    [FromQuery]
    public string Location { get; set; }
}

这也意味着模型可以使用任何属性,而我第一次尝试用 [FromQuery] 装饰 T 模型

包唯
2023-03-14

将属性[FromRoute]添加到控制器参数:

    public Task<AvailableSlotsResponse> GetAvailableSlots([FromRoute]Request<AvailableSlotsRequest> request)

删除Model属性中的属性<code>FromQuery</code>,并从de Location属性中取消注释属性<code<FromQuery

 类似资料:
  • 我们在我们的泽西应用程序中使用了@Role允许注释来限制用户对应用编程接口某些部分的访问。我们如何在SwaggerUI中显示这些信息? 到目前为止,我已经用@ApiOperation注释了方法以显示in/out参数,并尝试使用@Authorization/@AuthorizationScope,但我只为我们不使用的oauth2显示了它。最接近out case的是ApiKeyAuthDefiniti

  • 我使用Mustach和swagger codegen从定义生成模型实体,从操作生成代码(路径部分)。每个操作都指定一个参数列表和其他参数属性-数据类型、描述、默认值、必需、最大值、示例等。 除了'required'属性外,我无法确定如何访问任何参数属性。。。除了“模型”阶段。。。如何在“api”阶段做到这一点。。。我希望能够删除验证参数是否满足“必需”条件的代码,如min/max等。

  • 我有一个java项目(tomcat webapp)和一些REST Api。我想为他们生成大摇大摆的文档。我从本教程(github)开始。我没有maven我们使用蚂蚁任务。我加入了swagger-annotations-1.5.0。jar和所有随swagger jaxrs jar 1.5.0版本附带的jar(如果有用的话,我可以包括一个完整的列表),我已经注释了一些方法,我有一个如下的配置类: }

  • 我成功地在Spring boot应用程序上应用了swagger ui,并能够使用http://localhost:8181/swagger-用户界面。html 过了一段时间,我继续写我的申请,现在它不见了。我没有拿走任何罐子。我添加了一个应用程序启动类,当我在Wildfly 10上部署时,该类用于在启动时加载一些东西。 即使我尝试用tomcat将其作为Spring boot应用程序运行,也无法运行

  • 我们有一个。NET解决方案,有两个项目: null 当将Swagger UI添加到API项目(不是首选解决方案)时,它根本不起作用,可能是因为自定义控制器选择器 然而,我认为我遗漏了一些明显的东西,因为这感觉像是我们遗漏的一个非常基本的配置设置

  • 有没有人用spring-data-rest配置了swagger。我知道swagger有DocumentationConfig类,它扫描所有spring-mvc请求映射。但是,如何将其用于spring-data-rest,因为没有定义显式的请求映射。非常感谢在这方面的任何帮助。此外,我还想知道,是否有其他支持Spring-Data-REST的文档框架。