【问题标题】:Is there a way to pass a route parameter value that has spaces in it using the Swagger UI?有没有办法使用 Swagger UI 传递包含空格的路由参数值?
【发布时间】:2022-01-25 17:41:01
【问题描述】:

我正在使用 ASP.NET Core,并且我有一个具有 POST 操作的 API 控制器。路线是 /categories/{categoryname}。 categoryname的路由参数是一个字符串。

我正在使用 Swagger UI。我希望能够输入一个带有空格的字符串,例如:Executive Recruiter

有没有办法做到这一点?

【问题讨论】:

  • Executive%20Recruiter 工作吗? (URL 不能包含未编码的空格。Swagger 是否编码?如果是,在允许输入之前/之后?)
  • @user2864740 否 - 传递到控制器的变量是:Executive%20Recruiter。
  • 服务器端控制器应该根据RFC 3986 section 2.4解码URI中的percent-encoded characters
  • 如果在 Swagger UI 中输入“Executive Recruiter”会怎样?控制器内部计算的参数值是否包含空格或%20?

标签: asp.net-core asp.net-web-api swagger swagger-ui swagger-2.0


【解决方案1】:

您可以对查询字符串或路由值的数据进行编码和解码

  var s = "Executive Recruiter";
  var encoded = Uri.EscapeDataString(s);  // = Executive%20Recruiter
  var decoded = Uri.UnescapeDataString(encoded); // = Executive Recruiter

但通常不需要解码字符串,控制器会自动解码。

【讨论】:

    【解决方案2】:

    解决方法是我删除了 Post Action 上的路线。在 Swagger UI 中,我不需要添加 %20。这是控制器的外观:

        [HttpPost]
        [ProducesResponseType(typeof(ConnectionCategoryModel), StatusCodes.Status201Created)]
        [ProducesResponseType(StatusCodes.Status400BadRequest)]
        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
        [Consumes("application/json")]
        public async Task<ActionResult<ConnectionCategoryModel>> AddConnectionCategoryAsync(int connectionManagerID, string categoryName)
    

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 2015-03-31
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2021-11-15
      • 2020-02-03
      相关资源
      最近更新 更多