【问题标题】:Is there a way to stop [FromQuery] parameter to unescape the query string?有没有办法停止 [FromQuery] 参数来取消转义查询字符串?
【发布时间】:2022-01-06 22:24:13
【问题描述】:

我正在使用 .NET Core 3.1 开发一个 WebAPI 项目,并且我有一个具有以下操作的控制器:

public class MyApiController : Controller
{
        [HttpGet("api/custom")]
        public async Task<IActionResult> Custom([FromQuery(Name = "data")] string data)
        {
        }

}

我注意到我的 URL 的数据部分是自动转义的,所以如果我点击我的服务

service.com/api/custom?data=X%3D%3D%2BY 那么操作方法中的数据字段将出于某种原因保留 X== Y。我认为这是错误的,因为 %2B 应该是 +。

在一个空项目中,上面的代码sn-p正确地变成了X==+Y。在我的大型项目中,数据参数是 X== Y。

我想知道是否有一种好方法可以以某种方式控制这种逃避行为?

[更新] 如评论中所述,如果您在新项目中执行此操作,则控制器将为您提供正确的解码字符串 X==+Y。更新我的问题以询问如何解决此类问题?

【问题讨论】:

  • 我测试了你的代码,得到了预期的X==+Y (With method body = return Ok(data);)
  • 是的,你是对的。我创建了一个单独的控制器,它的行为与您描述的一样。但是在这个特定的控制器中,确实将 %2B 转换为 SPACE 而不是 +。我不确定它有什么不同。我会调查并更新我的问题

标签: c# .net-core asp.net-core-webapi


【解决方案1】:

您不需要任何额外的属性,这只会令人困惑。应该够了

[HttpGet("~/api/custom")]
public async Task<IActionResult> Custom(string data)

【讨论】:

  • 很棒的提示!谢谢。
  • 有没有办法以某种方式控制来自请求 URL 的参数如何到达函数的 data 参数?
  • @gyurisc 抱歉,我不明白这个问题。您可以发布您想要的示例吗?
  • 我试着写另一个问题。这是链接stackoverflow.com/questions/70621548/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多