使用.NET HttpClient类时,是否有一种简单的格式化查询字符串的方法?

布莱恩·莱特尔

我在不同的地方有一些代码,在这些地方我需要一个Dictionary<string,string>包含参数的查询字符串。我有一些自己的代码来格式化它,以便可以将其添加到URL的末尾。这个库中有内置的东西可以帮我吗?

达雷尔·米勒(Darrel Miller)

您可能要考虑使用UriTemplates构造Uris。语法在RFC6570中指定。在这里写了一个包含nuget包的库

使用UriTemplates,您不仅可以填写查询参数,例如

    [Fact]
    public void ShouldAllowUriTemplateWithQueryParamsWithOneValue()
    {
        var template = new UriTemplate("http://example.org/foo{?bar,baz}");
        template.SetParameter("baz", "yo");


        var uriString = template.Resolve();
        Assert.Equal("http://example.org/foo?baz=yo", uriString);
    }

如果您不提供查询字符串参数,请不要担心,该令牌将被删除。

它还处理路径参数,

    [Fact]
    public void ShouldAllowUriTemplateWithMultiplePathSegmentParameter()
    {
        var template = new UriTemplate("http://example.org/foo/{bar}/baz/{blar}");
        template.SetParameter("bar", "yo");
        template.SetParameter("blar", "yuck");
        var uriString = template.Resolve();
        Assert.Equal("http://example.org/foo/yo/baz/yuck", uriString);
    }

还有一些非常漂亮的东西,它们的参数是列表和字典,

    [Fact]
    public void ShouldAllowListAndSingleValueInQueryParam()
    {
        var template = new UriTemplate("http://example.org{/id*}{?fields,token}");
        template.SetParameter("id", new List<string>() { "person", "albums" });
        template.SetParameter("fields", new List<string>() { "id", "name", "picture" });
        template.SetParameter("token", "12345");
        var uriString = template.Resolve();
        Assert.Equal("http://example.org/person/albums?fields=id,name,picture&token=12345", uriString);
    }

它将处理各种棘手的URI编码问题,

    [Fact]
    public void ShouldHandleUriEncoding()
    {
        var template = new UriTemplate("http://example.org/sparql{?query}");
        template.SetParameter("query", "PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?book ?who WHERE { ?book dc:creator ?who }");
        var uriString = template.Resolve();
        Assert.Equal("http://example.org/sparql?query=PREFIX%20dc%3A%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%20SELECT%20%3Fbook%20%3Fwho%20WHERE%20%7B%20%3Fbook%20dc%3Acreator%20%3Fwho%20%7D", uriString);
    }


    [Fact]
    public void ShouldHandleEncodingAParameterThatIsAUriWithAUriParameter()
    {
        var template = new UriTemplate("http://example.org/go{?uri}");
        template.SetParameter("uri", "http://example.org/?uri=http%3A%2F%2Fexample.org%2F");
        var uriString = template.Resolve();
        Assert.Equal("http://example.org/go?uri=http%3A%2F%2Fexample.org%2F%3Furi%3Dhttp%253A%252F%252Fexample.org%252F", uriString);
    }

唯一仍然无法使用的项目是在URI中编码双字节Unicode字符。还有一个预览版本,它是PCL库,允许您在WinRT和Windows Phone上使用它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Asp.Net WebApi操作中使用FromUri属性时,如果没有路由或查询字符串参数,是否可以强制实例化复杂的类?

来自分类Dev

使用 ASP.NET 格式化 TSQL 字符串以模拟 SQL 管理器的最佳方法是什么?

来自分类Dev

是否有一种简单的方法来获取.NET为参数化查询生成的“ sp_executesql”查询?

来自分类Dev

有没有一种方法可以直接使用Style类自动格式化文本;

来自分类Dev

我需要一种简单的方法来使用Perl从SQL格式化日期

来自分类Dev

在Oracle 8上的Sentence Case中是否有一种简单的方法来转换字符串?还是应该使用正则表达式?

来自分类Dev

在.net中格式化字符串以使用Foxit阅读器打印pdf文件

来自分类Dev

有没有一种在调用变量名时使用字符串的方法?

来自分类Dev

使用exec()eval()方法时如何克服格式化字符串的限制?

来自分类Dev

使用Frames时,是否有一种具有KeyPreview类功能的方法?

来自分类Dev

有没有一种使用正则表达式格式化kendo网格列的方法?

来自分类Dev

有没有一种使用字符串来选择变量的方法?

来自分类Dev

有没有一种使用字符串来选择变量的方法?

来自分类Dev

有没有一种简单的方法可以使用vbscript将字符串转换为数学表达式?

来自分类Dev

有没有一种简单的方法可以使用vbscript将字符串转换为数学表达式?

来自分类Dev

有没有一种简单的方法可以使用正则表达式反转子字符串?

来自分类Dev

有没有一种方法可以使用System.Net.Http.HttpClient将大文件推送到远程服务器

来自分类Dev

在protobuf-net中,有没有一种方法可以指定在序列化/反序列化给定类型时要使用的自定义方法?

来自分类Dev

在protobuf-net中,有没有一种方法可以指定在序列化/反序列化给定类型时要使用的自定义方法?

来自分类Dev

查找.NET字符串结果的格式化部分

来自分类Dev

.NET数据注释,用于字符串格式化

来自分类Dev

有没有一种方法可以使编译器使用封闭的方法名称来初始化字符串?

来自分类Dev

使用ASP.NET访问查询字符串值

来自分类Dev

是否有一种方法可以仅使用字符串(否则为其URL)在ServiceStack中手动调用路由?

来自分类Dev

在Ansible / Jinja中,是否有一种方法可以使用k:v对字典来用整数替换字符串?

来自分类Dev

寻找一种更有效的方法来使用 STL 函数检查字符串是否为回文

来自分类Dev

有没有一种方法可以在Json.Net JsonSerializer中使用自定义缩进字符?

来自分类Dev

Python3需要使用带有字符串反斜杠而不是转义行的python来格式化查询的字符串

来自分类Dev

在Nuget中使用Install-Package时,有没有一种方法可以指定.NET Framework版本参数?

Related 相关文章

  1. 1

    在Asp.Net WebApi操作中使用FromUri属性时,如果没有路由或查询字符串参数,是否可以强制实例化复杂的类?

  2. 2

    使用 ASP.NET 格式化 TSQL 字符串以模拟 SQL 管理器的最佳方法是什么?

  3. 3

    是否有一种简单的方法来获取.NET为参数化查询生成的“ sp_executesql”查询?

  4. 4

    有没有一种方法可以直接使用Style类自动格式化文本;

  5. 5

    我需要一种简单的方法来使用Perl从SQL格式化日期

  6. 6

    在Oracle 8上的Sentence Case中是否有一种简单的方法来转换字符串?还是应该使用正则表达式?

  7. 7

    在.net中格式化字符串以使用Foxit阅读器打印pdf文件

  8. 8

    有没有一种在调用变量名时使用字符串的方法?

  9. 9

    使用exec()eval()方法时如何克服格式化字符串的限制?

  10. 10

    使用Frames时,是否有一种具有KeyPreview类功能的方法?

  11. 11

    有没有一种使用正则表达式格式化kendo网格列的方法?

  12. 12

    有没有一种使用字符串来选择变量的方法?

  13. 13

    有没有一种使用字符串来选择变量的方法?

  14. 14

    有没有一种简单的方法可以使用vbscript将字符串转换为数学表达式?

  15. 15

    有没有一种简单的方法可以使用vbscript将字符串转换为数学表达式?

  16. 16

    有没有一种简单的方法可以使用正则表达式反转子字符串?

  17. 17

    有没有一种方法可以使用System.Net.Http.HttpClient将大文件推送到远程服务器

  18. 18

    在protobuf-net中,有没有一种方法可以指定在序列化/反序列化给定类型时要使用的自定义方法?

  19. 19

    在protobuf-net中,有没有一种方法可以指定在序列化/反序列化给定类型时要使用的自定义方法?

  20. 20

    查找.NET字符串结果的格式化部分

  21. 21

    .NET数据注释,用于字符串格式化

  22. 22

    有没有一种方法可以使编译器使用封闭的方法名称来初始化字符串?

  23. 23

    使用ASP.NET访问查询字符串值

  24. 24

    是否有一种方法可以仅使用字符串(否则为其URL)在ServiceStack中手动调用路由?

  25. 25

    在Ansible / Jinja中,是否有一种方法可以使用k:v对字典来用整数替换字符串?

  26. 26

    寻找一种更有效的方法来使用 STL 函数检查字符串是否为回文

  27. 27

    有没有一种方法可以在Json.Net JsonSerializer中使用自定义缩进字符?

  28. 28

    Python3需要使用带有字符串反斜杠而不是转义行的python来格式化查询的字符串

  29. 29

    在Nuget中使用Install-Package时,有没有一种方法可以指定.NET Framework版本参数?

热门标签

归档