我想建立这样的URI
https://example.com/data/customers?$top=100
.
有没有
UriBuilder
用于创建OData URI(即可以处理诸如
$
适当地)?
完整信息
我有这样的代码(简化示例):
public Uri CreateMyApiUri(string rootUri, string apiPath, string entity, int pageSize)
{
var builder = new UriBuilder(rootUri);
builder.Path = ConcatPathParts(builder.Path, apiPath, entity); //basically string.Join("/", args), plus code to remove superfluous slashes
var parameters = HttpUtility.ParseQueryString(builder.Query);
if (pageSize > 0) parameters["$top"] = pageSize.ToString();
builder.Query = parameters.ToString();
return builder.Uri;
}
//called like this
var uri = CreateMyApiUri("https://example.com", "data", "customers", 100);
然而,OData的特殊特征
$
在URI中使用的编码为
%24
.
我找到了
OData.Net
在Github上,这似乎是一个有帮助的库,但它不是标准库的一部分,对于我的简单需求,它看起来相当重要,所以我希望在提交到odata.net路径之前找到更简单的东西…
当然,我可以通过做一个简单的
var uri = string.Join("/", new [] {rootUri, apiPath, entity, $"?$top={pageSize}"});
…但我想确保我充分利用了.NET库的字符转义功能,而不是为框架已经提供给我的东西创建解决方案。
注意:我知道您可以从OData服务生成类,但我不想使用这种方法,因为这需要在API更改时重新生成客户机代码(例如,向目标实体添加新字段)。相反,我希望使用更“纯”的HTTP方法。