swagger 由于ASP.NET核心查询使用不正确而导致站点损坏?

zbdgwd5y  于 2023-10-18  发布在  .NET
关注(0)|答案(2)|浏览(173)

我正试图让我的网站在ASP.NET核心的Swagger工作,但是,我有一些麻烦(也许是一些混乱?)如何指定查询参数。这个特定的API调用似乎破坏了网站,我不完全确定我做错了什么。下面是API调用:

[HttpGet]
    [Route("/v2/config/get_metadata/{name}/from?f={from}/to?t={to}")]
    [ValidateModelState]
    [SwaggerOperation("GetMetadata")]
    [SwaggerResponse(statusCode: 200, type: typeof(Metadata), description: "successful operation")]
    public virtual IActionResult GetMetadata([FromRoute][Required] string name,
      [FromQuery] DateTime from, [FromQuery] DateTime to)
    {
      //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
      // return StatusCode(200, default(Dataset));

      //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
      // return StatusCode(400);

      string exampleJson = null;
      exampleJson = "{}";
      exampleJson = "";

      var example = exampleJson != null
      ? JsonConvert.DeserializeObject<Metadata>(exampleJson)
      : default(Metadata);
      //TODO: Change the data returned
      return new ObjectResult(example);
    }

我不完全确定我做错了什么,所以如果有人能发现错误,请让我知道!我怀疑这是我如何定义路由或如何使用FromQuery,但我不能让它工作:(。
fromto也是可选的过滤器。
谢谢你,谢谢

vc9ivgsu

vc9ivgsu1#

路由无效,因为它在查询部分包含两个问号和一个未转义的斜杠“/”。可能的有效路由可能是:

/v2/config/get_metadata/{name}

为了使用查询字符串参数(?f={from}&to={to}),可在参数前注明[FromQuery]

ubof19bj

ubof19bj2#

Route中的值不正确,它不应该包含查询参数和?符号。类似的东西将适用于像/v2/config/get_metadata/{name}?from={from}&to={to}这样的请求

[HttpGet]
[Route("/v2/config/get_metadata/{name}")]
public virtual IActionResult GetMetadata([FromRoute][Required] string name, [FromQuery] DateTime? from, [FromQuery] DateTime? to)

fromto是可选的,因为使用了可空类型DateTime?。您还可以合并HttpGetRoute,并获得相同的结果

[HttpGet("/v2/config/get_metadata/{name}")]

相关问题