我正在使用 HttpClient (Dot Net 5),并且尝试通过在 URL 中指定实体的 id 来从 DotNetCore Web 服务获取实体。
Postman 或 Swagger 等其他客户端工作正常。
失败示例:
string id = "Person/65-C";
var httpResponse = await httpClient.GetAsync(string.Format("/persons/{0}", System.Web.HttpUtility.UrlEncode(id)));
我遇到了同样的问题。花了我们的钱来寻找解决方案,但没有任何运气。我最终更改了路线并将路线参数转换为 QueryString 参数。可能不是每个场景的理想解决方案,但对我来说有效。
更改路线从
$"api/album/{HttpUtility.UrlEncode("a/b")}"
到
$"api/album/url=a/b"
在控制器中
[HttpGet]
public TestModel Get([FromQuery] string url)
{
}
您可以在 web.config 上将 genericUriParserOptions 设置为 DontUnescapePathDotsAndSlashes。如果您的服务网址是 https,请记住将名称设置为 https。
<configuration>
<uri>
<schemeSettings>
<add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
</schemeSettings>
</uri>
</configuration>