如何使用Microsoft.AspNetCore.Http.Extensions.QueryBuilder构建查询?
解决.NET Core中QueryBuilder的使用问题
首先得明确:QueryBuilder的作用是帮你生成URL中**?后面的查询字符串部分**,不是用来处理路径参数(比如你例子里的/1)的。你之前的测试代码失败,是因为把路径参数id也当成查询参数传给了QueryBuilder,这就导致生成的URL不符合预期啦。
正确的使用步骤
- 第一步:先拼接好包含路径参数的基础URL(也就是把
/1加到baseUri后面) - 第二步:用
QueryBuilder构建查询参数(这里是Role=Salesman) - 第三步:把生成的查询字符串拼到路径URL后面
修正后的测试代码
using System.Collections.Generic; using Microsoft.AspNetCore.Http.Extensions; using Xunit; public class QueryBuilderTests { [Fact] public void ThisTestPassesWithQueryBuilder() { string baseUri = "http://localhost:13493/api/employees"; string expected = "http://localhost:13493/api/employees/1?Role=Salesman"; // 1. 处理路径参数:把id=1拼到基础路径里 var pathWithId = $"{baseUri}/1"; // 2. 用QueryBuilder构建查询参数(只放查询参数部分) var queryParams = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("Role", "Salesman") }; var queryBuilder = new QueryBuilder(queryParams); // 3. 拼接路径和查询字符串 var actualUri = $"{pathWithId}{queryBuilder}"; Assert.Equal(expected, actualUri); } }
额外说明
- 如果你的路径参数是动态的,也可以用
string.Format或者插值字符串来处理,确保路径部分正确。 QueryBuilder会自动帮你处理特殊字符的编码,比如如果参数值里有空格、中文等,它会自动转成URL编码格式,这比自己拼接字符串要安全得多。
内容的提问来源于stack exchange,提问作者developer9969
相关产品推荐
相关产品推荐

