【发布时间】:2021-08-04 12:27:29
【问题描述】:
我正在尝试发出Http 请求,如下所示:
var category = Uri.EscapeDataString("Power Tools");
var request = new HttpRequestMessage(HttpMethod.Get, $"/api/Items/GetAll?category={category}");
category 现在等于:Power%20Tools
请求被翻译成:
request = {Method: GET, RequestUri: 'http://localhost/api/Items/GetAll?category=Power Tools', ...
为什么HttpRequestMessage 解码我的编码字符串?
【问题讨论】:
-
您在哪里阅读请求?
-
@vernou 我正在调试该方法。我只是悬停在它上面。我在控制器上有一个正则表达式验证输入。它不接受空格。
-
我认为您需要包含更多细节。我刚刚做了一个快速测试,但没有看到相同的行为。
-
@vernou 我看到了
http://localhost/api/Items/GetAll?category=Power%20Tools。但是,控制器看到Power Tools并以错误消息响应。我的正则表达式是^[a-zA-Z0-9%]+$。如果我在正则表达式中添加一个空格,这将有效。 -
更清楚一点:Category 的值是“Power Tools”,但是为了在 URL 中清楚地表示它,我们必须对其进行转义(因此它变成了“Power%20Tools”)。因为转义只是使 URL 起作用,所以当 ASP.NET 将它传递给控制器方法时,它会被解码。
标签: c# httprequest