【发布时间】:2019-01-14 14:03:14
【问题描述】:
我正在使用 Refit 编写一些 API,这很有效,但我在找出一种好的(如“干净”、“正确”)方法来对返回的数据执行一些任意处理时遇到了一些麻烦.
例如,考虑以下代码:
public interface ISomeService
{
[Get("/someurl/{thing}.json")]
Task<Data> GetThingAsync([AliasAs("thing")] string thing);
}
现在,我见过的许多 REST API 都有将实际数据(如“有用”数据)深入到 JSON 响应中的不幸习惯。比如说,实际的 JSON 有这样的结构:
{
"a" = {
"b" = {
"data" = {
...
}
现在,我通常只映射所有必要的模型,这将允许 Refit 正确反序列化响应。这虽然使 API 使用起来有点笨拙,因为每次我使用它时,我都必须执行以下操作:
var response = await SomeService.GetThingAsync("foo");
var data = response.A.B.Data;
我的意思是,这两个外部模型实际上只是容器,不需要向用户公开。或者,假设Data 属性是具有另一个属性IEnumerable 的模型,我可能只想直接将其返回给用户。
我不知道如何做到这一点,而不必为每个服务编写无用的包装类,其中每个服务显然还必须重复接口等中的所有 XML cmets,从而导致更多无用的代码四处飘荡.
我只想有一些简单的、可选的 Func<T, TResult> 等效项,它会在给定的 Refit API 的结果上调用,并在将返回的数据呈现给用户之前对其进行一些修改。
【问题讨论】:
标签: c# .net .net-core .net-standard refit