发出获取请求时出现多个问号

Posted

技术标签:

【中文标题】发出获取请求时出现多个问号【英文标题】:Multiple Question Marks appear when making a get request 【发布时间】:2021-10-18 08:43:26 【问题描述】:

我正在编写一个 Telegram Bot 作为实习项目。它旨在帮助客户轻松查看公司销售报告并向他们发送消息通知(使用 Webhook)。

对于大多数报告,我向我编写的 API 发出请求,该 API 生成并以字节数组/JSON 对象的形式返回它们。预期的结果是一个字节数组,大多数情况都是如此。 但是,其中一份报告返回 404 并在 Uri 中包含多个问号 - 我没有添加。 https://url/?EpumpReport?/Company?/CompanyVarianceReport

预期的行为是 200 OK,并且是 pdf 内容。

我尝试在类中初始化 HttpClient,而不是在 Startup.xml 中注册它。 我还尝试通过创建 HttpRequestMessage 并发送它来以不同的方式发送请求。 一切都无济于事。

我写了这个函数来减少混乱: GetReportWithSummaryDataAsync(message, Uri, _userData)。 message 参数包含标识用户的 ChatId 和标识消息的 messageId。

            _client.DefaultRequestHeaders.Add("Authorization", $"Bearer userData.AuthKey");

            var requestMessage = new HttpRequestMessage(HttpMethod.Get, uri);

            var response = await _client.SendAsync(requestMessage).ConfigureAwait(false);
            var content = await response.Content.ReadAsStreamAsync();
            var result = await JsonSerializer.DeserializeAsync<SummaryData>(content);

            // Todo add check for NullReferenceException
            _pdfReport = new MemoryStream(result.pdfReport);
            return result;

这是函数本身。之后,我将结果的内容发送给用户。

主要问题是 Uri 会自行改变。 假设我向https://google.com/example 发送请求,当请求即将发送/正在发送时,Uri 更改为https://?google.com?/example? 而且,我不知道为什么。

【问题讨论】:

这段代码哪里有问题? 在发送请求的地方。 _client.SendAsync。在终端中,请求发送到的 URI 发生变化,并带有多个问号。 那么,您正在向 Uri 参数请求 PDF 内容并将响应发送到 ChatId ChatId 向用户发送响应,是的。 见sendDocument,这可能是你要找的。​​span> 【参考方案1】:

原来在我的 URI 字符串中存在隐藏字符。该公司的一位前端开发人员提到了他们遇到类似问题的经历;然后,我使用this tool 从字符串中查找并删除字符。它现在可以正常工作了。

【讨论】:

以上是关于发出获取请求时出现多个问号的主要内容,如果未能解决你的问题,请参考以下文章

获取 url 上的请求参数

chrome方框问号是啥

如何获取HTTP请求响应问号

怎么js代码取问号后面参数

Linux启动oracle数据库时,显示很多问号

错误:使用 Fetch API 向第三方 API 发出 GET 请求时出现“TypeError:无法获取”