大多数HttpClient.PostAsync()
的重载允许传入一个字符串或URI
。然而,有些(在Formatting
命名空间中)只允许字符串。为此,我构建并使用如下URI字符串:
string uri = "http://myserver.com/" + userSuppliedName + "/dosomething/";
client.PostAsync(uri, someObject, formatter);
我现在担心的是userSuppliedName
可能是无效的或恶意的,所以我想确保它被正确转义。在System.Uri
的文档中,它声明默认情况下传入的字符串将被正确转义,但由于我使用的PostAsync
方法只支持字符串URI,我想检查:它会自动正确转义吗?如果不是,我应该在构建string uri
时转义userSuppliedName
吗?
Use Uri.EscapeDataString()
string uri = "http://myserver.com/" + Uri.EscapeDataString(userSuppliedName) + "/dosomething/";
client.PostAsync(uri, someObject, formatter);
您可以传递new Uri(uri).AbsoluteUri
作为第一个参数,以缓解编码问题。它会帮你的