gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:57:51 24 4
gpt4 key购买 nike

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

最佳答案

您可能需要考虑使用 UriTemplates 来构造 Uris。语法在 RFC6570 中指定。我写了一个有 nuget 包的库 here .

使用 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);
}

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

它还处理路径参数,

    [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 上使用它。

关于c# - 使用 .NET HttpClient 类时,是否有一种简单的方法来格式化查询字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19414920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com