Flurl可扩展性

1614 更新于: 2021-03-15 读完约需 2 分钟

可扩展性(Extensibility)

由于Flurl的大部分功能是通过扩展方法提供的,所以使用Flurl本身使用的相同模式来扩展非常容易。

扩展URL构建器

链式的URL生成器方法通常有三种重载:一种是扩展Flurl.Url,一种是扩展System.Uri以及扩展String。所有这些扩展都应该返回修改后的Flurl.Url对象:

public static Url DoMyThing(this Url url) {
    // 使用url进行业务扩展
    return url;
}

public static Url DoMyThing(this Uri uri) => new Url(uri).DoMyThing();
public static Url DoMyThing(this string url) => new Url(url).DoMyThing();

扩展Flurl.Http

链式的Flurl.Http扩展方法通常包含4个,分别为:Flurl.UrlSystem.UriString以及IFlurlRequest。所有的都应该返回当前的IFlurlRequest,以便进一步的链式扩展,如下:

public static IFlurlRequest DoMyThing(this IFlurlRequest req) {
    // 可使用req.Settings, req.Headers, req.Url等属性进行业务处理
    return req;
}

public static IFlurlRequest DoMyThing(this Url url) => new FlurlRequest(url).DoMyThing();
public static IFlurlRequest DoMyThing(this Uri uri) => new FlurlRequest(uri).DoMyThing();
public static IFlurlRequest DoMyThing(this string url) => new FlurlRequest(url).DoMyThing();

现在,你可以使用如下的方式调用自定义扩展的链式方法:

result = await "http://api.com"
    .DoMyThing() // 字符串扩展方法
    .GetAsync();

result = "http://api.com"
    .AppendPathSegment("endpoint")
    .DoMyThing() // Url扩展方法
    .GetAsync();

result = "http://api.com"
    .AppendPathSegment("endpoint")
    .WithBasicAuth(u, p)
    .DoMyThing() // IFlurlRequest扩展方法
    .GetAsync();

在某些情况下,你可能还需要第五个重载:一个IFlurlClient扩展。 如果您的扩展仅与SettingsHeaders交互,请记住,它们的默认值存在于客户端级别。因此,为完整起见,您的扩展也应该支持客户端级别的默认值。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

本文永久链接码友网 » Flurl中文文档(使用教程) » Flurl可扩展性 分享:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册