【问题标题】:How to build a query with Microsoft.AspNetCore.Http.Extensions.QueryBuilder如何使用 Microsoft.AspNetCore.Http.Extensions.QueryBuilder 构建查询
【发布时间】:2018-10-16 06:59:48
【问题描述】:

我一直在寻找在 .NET Core Web API 中构建查询的方法,并且我在 Microsoft.AspNetCore.Http.Extensions 中发现了 Querybuilder

我不清楚如何使用它。

[Fact]
public void ThisTestFailsWithQueryBuilder()
{
    string baseUri  = "http://localhost:13493/api/employees";
    string expected = "http://localhost:13493/api/employees/1?Role=Salesman";

    var kvps = new List<KeyValuePair<string, string>>
    {
        new KeyValuePair<string, string>("id", "1"),  
        new KeyValuePair<string, string>("role", "Salesman"),  
    };
    var query      = new QueryBuilder(kvps).ToQueryString();
    var finalQuery = baseUri + query;
    Assert.Equal(expected,finalQuery);
}

[Fact]
public void ThisIsSUCCESSNotUsingQueryBuilder()
{
    string baseUri  = "http://localhost:13493/api/employees";
    string expected = "http://localhost:13493/api/employees/1?Role=Salesman";

    string id          = "1";
    string role        = "Salesman";
    string partialQueryString = $"/{id}?Role={role}";
    string query       = baseUri + partialQueryString;

    Assert.Equal(expected,query);
}

如何修改我的失败测试,​​以便使用 QueryBuilder 的测试有效?

【问题讨论】:

    标签: c# asp.net-core asp.net-core-webapi


    【解决方案1】:

    查询表示 URI 中 ? 之后的所有内容。 /1 是 URI 的一部分,而不是查询字符串。

    包括您在第一个示例中所做的,finalQuery 将导致

    http://localhost:13493/api/employees?id=1&role=Salesman
    

    这就是测试断言失败的原因。

    您需要更新失败的测试

    public void ThisTest_Should_Pass_With_QueryBuilder() {
        string baseUri = "http://localhost:13493/api/employees";
        string expected = "http://localhost:13493/api/employees/1?role=Salesman";
    
        string id = "1";
        var kvps = new List<KeyValuePair<string, string>> { 
            new KeyValuePair<string, string>("role", "Salesman"),  
        };
        var pathTemplate = $"/{id}";
        var query = new QueryBuilder(kvps).ToQueryString();
        var finalQuery = baseUri + pathTemplate + query;
        Assert.Equal(expected, finalQuery);
    }
    

    【讨论】:

    • 感谢您的明确解释。我现在明白了。我找不到任何示例或解释。
    猜你喜欢
    • 2021-06-05
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多