转换对象到urlencoded的字符串

转换对象到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

+0

我认为downvotes的意思是“你应该写你的scenerio”。你为什么想这样做。你想在哪里使用这个?标题是“object to url”,标签是“asp.net-mvc”,在MVC中最好的方法是@Darin的建议。因为UrlHelper是专门设计的,所以你的问题不够清楚。我希望你明白... – 2013-03-05 07:39:42

你可以使用一个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()); 
    } 
}