包含 /

问题描述 投票:0回答:3

我正在使用 HttpClient (Dot Net 5),并且尝试通过在 URL 中指定实体的 id 来从 DotNetCore Web 服务获取实体。

  • 如果 id 不包含任何需要编码的字符,它就可以工作。
  • 如果 id 包含斜杠 (/),则会失败(HTTP 404)。
    • 网络服务 诊断确认请求未到达该方法。

Postman 或 Swagger 等其他客户端工作正常。

失败示例:

string id = "Person/65-C";
var httpResponse = await httpClient.GetAsync(string.Format("/persons/{0}", System.Web.HttpUtility.UrlEncode(id)));
c# asp.net-core-webapi dotnet-httpclient .net-5
3个回答
1
投票

我遇到了同样的问题。花了我们的钱来寻找解决方案,但没有任何运气。我最终更改了路线并将路线参数转换为 QueryString 参数。可能不是每个场景的理想解决方案,但对我来说有效。

更改路线从

$"api/album/{HttpUtility.UrlEncode("a/b")}"

$"api/album/url=a/b"

在控制器中

[HttpGet]
public TestModel Get([FromQuery] string url)
{
}

0
投票

我建议你应该在服务器 API 中使用

 [HttpGet("persons/{**value}")]
属性。

我的测试示例代码。

[HttpGet("persons/{**value}")]
public string test(string value)
{
    return "userid: = " + value;
}


0
投票

您可以在 web.config 上将 genericUriParserOptions 设置为 DontUnescapePathDotsAndSlashes。如果您的服务网址是 https,请记住将名称设置为 https。

<configuration>
  <uri>
    <schemeSettings>
      <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
    </schemeSettings>
  </uri>
</configuration>

© www.soinside.com 2019 - 2024. All rights reserved.