【问题标题】:ASP.net core 3.0 GET Method with %2B in query parameter not working on AzureASP.net core 3.0 GET Method with %2B in query parameter 在 Azure 上不起作用
【发布时间】:2019-12-09 15:19:18
【问题描述】:

我的 asp.net core 3.0 api 有一个非常奇怪的问题,它可以在我的机器上正常运行,但在特定情况下它在 Azure 上无法运行。

假设我们有这条路线,并且我的机器和 azure Web 应用都使用完全相同的代码查询同一个数据库:

/api/employees/{email}

如果我使用现有的电子邮件,即:j.doe@mail.com,这适用于我的机器和 Azure,并带有以下回复:

{
    "employeeId": "12904a63-94b5-411a-87bc-07bb2d2de4f0",
    "lastName": "John",
    "firstName": "Doe",
    "email": "j.doe@mail.com"
}

现在,如果我尝试发送此电子邮件 jane.doe@mail.com,此用户在我的数据库中不存在,并且我的计算机和 Azure 上有此 404 消息:

{
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.4",
    "title": "Not Found",
    "status": 404,
    "traceId": "00-b8cbc03357fc564bb22dc6ff231336ef-e10fac745a531549-00"
}

现在事情变得越来越奇怪了:

我的数据库中有这个电子邮件地址 jane.doe+test@mail.com

在我的机器上我有这个结果:

{
    "employeeId": "4569bc34-94b5-411a-87bc-07bb2d2de4f0",
    "lastName": "Jane",
    "firstName": "Doe",
    "email": "jane.doe+test@mail.com"
}

在天蓝色我有这个 404 错误

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

在 azure web 应用程序上打开日志我有这个跟踪:

2019-12-09 14:48:13 MYAPI-QA GET /api/employees/jane.doe+test@mail.com X-ARR-LOG-ID=8c3956c0-3dba-46e5-a292-7b59facfc7ce 443 - 1.1.1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64;+rv:71.0)+Gecko/20100101+Firefox/71.0 ARRAffinity=;+AppServiceAuthSession= - myapi.azurewebsites.net 404 11 0 433 2335 79

我的 webapi 没有写入日志,而且看起来这个 404 消息根本不是来自我的 webapi...

【问题讨论】:

  • 您找到答案了吗?我对包含 %2B 的路线也有同样的问题
  • 模型绑定似乎将 %2B 转换为空格而不是 + 或者至少它是双重转义它。 “this+is+a+string”来自 url 中的“this is a string”。但是,当一个 + 打算作为一个加号时,它似乎会加倍解决它。我在 url 中传递“qu%2B9I”,它绑定到包含“qu 9l”的字符串变量。现在找出原因
  • 只是为了跟进我的上一条评论。它必须是 vue/nuxt 以某种方式改变它。直接调用get api方法按预期工作。

标签: c# azure asp.net-core azure-web-app-service


【解决方案1】:

好的,我终于找到了我的问题。

代码在我的机器上运行,因为我使用的是 kestrel。 使用 IIS 运行相同的代码无法解决此错误:

HTTP Error 404.11 - Not Found
The request filtering module is configured to deny a request that contains a double escape sequence.

为了解决这个问题,我不得不在里面添加一个 web.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="true"/>
    </security>
  </system.webServer>
</configuration>

【讨论】:

    猜你喜欢
    • 2021-03-05
    • 2021-10-31
    • 1970-01-01
    • 2013-05-13
    • 2021-01-20
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多