我99%确定没有内置的实用程序可以完成这项任务。这不是一个非常常见的任务,因为Web服务器通常不会使用URLEncoded键/值字符串进行响应。
你对混合反射和LINQ感觉如何?这个方法可以工作:
var foo = new EditListItemActionModel() {
Id = 1,
State = 26,
Prefix = "f",
Index = "oo",
ParentID = null
};
var properties = from p in foo.GetType().GetProperties()
where p.GetValue(foo, null) != null
select p.Name + "=" + HttpUtility.UrlEncode(p.GetValue(foo, null).ToString());
string queryString = String.Join("&", properties.ToArray());
更新:
要编写一个返回任何一层对象的QueryString表示的方法,你可以这样做:
public string GetQueryString(object obj) {
var properties = from p in obj.GetType().GetProperties()
where p.GetValue(obj, null) != null
select p.Name + "=" + HttpUtility.UrlEncode(p.GetValue(obj, null).ToString());
return String.Join("&", properties.ToArray());
}
string queryString = GetQueryString(foo);
你也可以将它创建为一个扩展方法,而且几乎不需要额外的工作
public static class ExtensionMethods {
public static string GetQueryString(this object obj) {
var properties = from p in obj.GetType().GetProperties()
where p.GetValue(obj, null) != null
select p.Name + "=" + HttpUtility.UrlEncode(p.GetValue(obj, null).ToString());
return String.Join("&", properties.ToArray());
}
}
string queryString = foo.GetQueryString();
SetQueryParams
可以完全满足您的需求。如果您只需要URL构建器而不是所有的HTTP内容,则可以在此处找到它(https://www.nuget.org/packages/Flurl/)。[免责声明:我是这个项目的作者] - Todd Menier