2010-08-30 2 views
1

MyObject myobject = new MyObject(); myobject.name = "Test"; myobject.address = "test"; myobject.contactno = 1234; string url = "http://www.myurl.com/Key/1234?" + myobject; WebRequest myRequest = WebRequest.Create (url); WebResponse myResponse = myRequest.GetResponse(); myResponse.Close();Как разместить пользовательский пользовательский объект в URL-адресе?

Теперь выше не работает, но если я пытаюсь ударить URL вручную, таким образом, он работы-

"http://www.myurl.com/Key/1234?name=Test&address=test&contactno=1234 

Может кто-нибудь сказать мне, что я делаю неправильно здесь?

ответ

1

В этом случае «myobject» автоматически вызывает свой метод ToString(), который возвращает тип объекта в виде строки.

Вам нужно выбрать каждое свойство и добавить его в строку запроса вместе со своим значением. Для этого вы можете использовать класс PropertyInfo. Метод

foreach (var propertyInfo in myobject.GetType().GetProperties()) 
{ 
    url += string.Format("&{0}={1}", propertyInfo.Name, propertyInfo.GetValue(myobject, null)); 
} 

В GetProperties() перегружен и может быть вызван с BindingFlags, так что только определенные свойства возвращаются (как BindingFlags.Public, чтобы возвращать только открытые свойства). См: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx

1

Я бы рекомендовал определить, как превратить MyObject в значения строки запроса. Создайте метод для объекта, который знает, как установить свойства для всех своих значений.

public string ToQueryString() 
{ 
    string s = "name=" + this.name; 
    s += "&address=" + this.address; 
    s += "&contactno=" + this.contactno; 
    return s 
} 

Затем вместо добавления myObject добавьте myObject.ToQueryString().

0

Вот метод ToString я написал -

public override string ToString() 
    { 
     Type myobject = (typeof(MyObject)); 
     string url = string.Empty; 
     int cnt = 0; 
     foreach (var propertyInfo in myobject.GetProperties(BindingFlags.Public | BindingFlags.Instance)) 
     { 
      if (cnt == 0) 
      { 
       url += string.Format("{0}={1}", propertyInfo.Name, propertyInfo.GetValue(this, null)); 
       cnt++; 
      } 
      else 
       url += string.Format("&{0}={1}", propertyInfo.Name, propertyInfo.GetValue(this, null)); 
     } 
     return url; 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^