HTTP GET 请求时携带的参数直接在 URL 中,形式如 ?key1=value&key2=value&key3=value
。如果是 POST 请求时,我们可以使用一些库序列化为 json 格式作为 BODY 发送,那么 GET 请求呢?有可以直接将其序列化为 HTTP GET 请求的 query 字符串的吗?
本文内容
HTTP GET 请求
一个典型的 HTTP GET 请求带参数的话大概是这样的:
https://s.blog.walterlv.com/api/example?key1=value&key2=value&key3=value
于是我们将一个类型序列化为后面的参数:
[DataContract]
public class Foo
{
[DataMember(Name = "key1")]
public string? Key1 {
get; set; }
[DataMember(Name = "key2")]
public string? Key2 {
get; set; }
[DataMember(Name = "key3")]
public string? Key3 {
get; set; }
}
库?
可能是这个需求太简单了,所以并没有找到单独的库。所以我就写了一个源代码包放到了 nuget.org 上。
在这里下载源代码包:
你不需要担心引入额外的依赖,因为这是一个源代码包。关于源代码包不引入额外依赖 dll 的原理,可以参见:
方法
我们需要做的是,将一个对象序列化为 query 字符串。假设这个对象的局部变量名称是 query
,于是我们需要:
- 取得此对象所有可获取值的属性
query.GetType().GetProperties()
- 获取此属性值的方法
property.GetValue(query, null)