【发布时间】: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