转换对象到urlencoded的字符串
问题描述:
我有一个类转换对象到urlencoded的字符串
class Example
{
public int Prop1 { get; set; }
public int Prop2 { get; set; }
public String Prop3 { get; set; }
}
我怎样才能自动将这个对象转换为URLEncoded字符串以便然后将其附加到我的主机?
url编码字符串:prop1=val1&prop2=val2&prop3=val3
最终结果:http://example.com?prop1=val1&prop2=val2&prop3=val3
答
你可以使用一个UrlHelper
:
var model = new MyClass
{
Prop1 = 1,
Prop2 = 2,
Prop3 = "prop 3"
};
string url = Url.Action("index", "home", model);
// will generate /?Prop1=1&Prop2=2&Prop3=prop%203
如果你想要一个绝对URL只使用proper overload
:
string url = Url.Action("index", "home", model, "http");
+2
这将只适用于MVC,对不对? – 2013-03-05 07:41:34
+1
当然,它会工作,为什么不呢? – 2013-03-05 08:11:11
答
如果您使用的是Asp.Net MVC,那么只需将FormMethod更改为GET即可。其他的,如果你想在代码中使用反射。 (如下)
public class TestModel
{
[Required]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public string Test()
{
TestModel model=new TestModel(){Name="Manas",Id=1};
Type t = model.GetType();
NameValueCollection nvc=new NameValueCollection();
foreach (var p in t.GetProperties())
{
var name = p.Name;
var value=p.GetValue(model,null).ToString();
nvc.Add(name, value);
}
var result= ConstructQueryString(nvc);
return result;
}
public string ConstructQueryString(NameValueCollection Params)
{
List<string> items = new List<string>();
foreach (string name in Params)
items.Add(String.Concat(name, "=", HttpUtility.UrlEncode(Params[name])));
return string.Join("&", items.ToArray());
}
}
我认为downvotes的意思是“你应该写你的scenerio”。你为什么想这样做。你想在哪里使用这个?标题是“object to url”,标签是“asp.net-mvc”,在MVC中最好的方法是@Darin的建议。因为UrlHelper是专门设计的,所以你的问题不够清楚。我希望你明白... – 2013-03-05 07:39:42