【问题标题】:C# - WebApi - Special caractersC# - Web Api - 特殊字符
【发布时间】:2021-10-05 20:03:43
【问题描述】:

我需要一些帮助来理解 api 和特殊字符;我遇到了 xml 内容的问题,现在是字符串

我的 API 控制器

[Route("Coordonnee/BySite/{siteCode}")]
[HttpGet]
public List<Coordonnee> GetDdpCoordonneeBySite(string siteCode)

我在 C# 程序中使用 HttpClient 调用它,如下所示

        HttpResponseMessage response = _getClient.GetAsync($"{uri}/{id}").Result;

        var respResult = string.Empty;
        if (response.IsSuccessStatusCode)
            respResult = response.Content.ReadAsStringAsync().Result;

        return respResult;

只要我的 SiteCode 不包含任何特殊内容,它就可以工作;如果我输入“TT+T”然后像“TT&20&T”一样被Urlencoded并且api没有被调用

有人可以解释一下吗?是控制器吗?或通话 谢谢;

更新: 我还用大摇大摆的页面对其进行了测试:参数中的 T+T 给出了这个 URI,它破坏了路由并且不调用 api http://localhost:8085/Api/Ddp/Coordonnee/BySite/T%2BT

从我的代码中,总是找不到 404,不管有没有 UrlEncode...都是一样的

【问题讨论】:

  • 在一个URL中+是一个空格,也被编码为%20您的代码专门要求TT T。至于API没有被调用,不是因为空间。如果 URL 实际匹配路由,则整个。 BySite/ 之后的字符串将作为 siteCode 传递。您需要对数据进行 URL 编码,而不仅仅是将其附加到 URL
  • 发布一个实际重现问题的示例并明确提及发生的情况。您是否在客户端中遇到异常? 实际响应是什么?服务器异常? 实际 URL 是什么?而不是 GetAsync($"{uri}/{id}") 将 URL 存储在变量中,以便您可以检查它。将所有内容放在一行中,您将一无所获
  • 顺便说一句,阻塞异步调用是一个非常的坏主意。出错时返回空是一个非常非常的坏主意,它允许应用程序在处理错误数据的情况下继续工作。像这样的错误已经花费了数十亿美元,并且是一些最壮观的灾难的幕后黑手。 await _client.GetStringAsync(url) 至少会告诉你出了什么问题
  • 使用WebUtility.UrlEncode 编码字符串之前 将其附加到URL。同样,这不会破坏路由。您可能还有其他错误,或者服务器返回的错误被忽略。

标签: c# asp.net-web-api webclient


【解决方案1】:

根据提供的 sn-ps,我在 GitHub 上创建了一个repository。 结果如下:

GetAsync 似乎会编码“+”。您介意提供有关该问题的更多信息吗?

【讨论】:

  • 是的,没错;编码已完成,但在调试中从未达到 api 函数,并且我得到了 404 未创建。对我来说,它不是 NetCore;我对招摇有同样的问题...将尝试另一个
  • 你可以尝试跟踪双方的请求吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 2014-11-05
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
相关资源
最近更新 更多