c# - 动态替换 URI 中的参数
问题描述
我编写了一个实用程序类函数,它接受一个 URI 和一个使用提供的 URI 创建 HTTPClient 的 ID。
private async Task<T> GetUriScopedResource<T>(string uri, int id)
{
var client = _httpClientFactory.CreateClient(_baseUri);
client.BaseAddress = new Uri(_baseUri);
var result = await client.GetAsync($"{uri}{id}");
return await DeserialiseContentAsync<T>(result);
}
以上当前设置为期望动态参数位于 uri 的末尾。
例如。
"api/Employee/{id}"
但是我的要求已经改变,我有一个如下所示的控制器方法:
"api/Employee/{id}/accounts"
我该如何修改
client.GetAsync($"{relativeUri}{id}");
为提供的任何 URI 动态替换 {X}?URIBuilder 能实现这个期望的功能吗?
任何帮助都会很棒!
解决方案
如果您只是在寻找漂亮的结构化 URL 构建,Flurl(免责声明:我是作者)可能会有所帮助。它有一个静态Url.Combine
方法,类似于Path.Combine
文件,确保段之间有 1 个且只有 1 个分隔符:
Url.Combine(_baseUri, relativeUri, id, "accounts")
核心 Flurl 包非常小且无依赖性。
Flurl.Http添加了流畅的 HTTP、Json.NET(反)序列化、测试功能和智能HttpClient
实例管理。您的示例如下所示:
private Task<T> GetUriScopedResource<T>(string uri, int id)
{
return _baseUri
.AppendPathSegments(uri, id, "accounts")
.GetJsonAsync<T>();
}
AppendPathSegments
基本上给你Url.Combine
一个流畅的扩展方法 off string
。
推荐阅读
- .net - 连接到 UWP 中的 SignalR(核心)集线器时出现“证书颁发机构无效或不正确”
- python - 如何在 jupyter notebook 中获得大的输出窗口?
- nginx - 友好的 url nginx 修复
- javascript - Chrome 控制台:导航到网页并在加载后单击按钮
- google-cloud-build - 访问 Google Cloud Build 实例上的服务
- android - Android RecyclerView NullPointerException
- c# - Mvc 从级联下拉列表中保存项目
- cron - Con Jobs 访问 URL ?
- java - 在批处理运行期间检查 NPE
- java - 多线程、性能和精度考虑