2010-08-30 24 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();Comment publier un objet personnalisé défini par l'utilisateur dans une URL?

Maintenant, le travail ne marche pas dessus, mais si je tente de frapper manuellement l'URL de cette façon il ŒUVRES

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

Quelqu'un peut-il me dire ce que je fais mal ici?

Répondre

1

Dans ce cas, "myobject" appelle automatiquement sa méthode ToString(), qui renvoie le type de l'objet sous forme de chaîne.

Vous devez sélectionner chaque propriété et l'ajouter à la chaîne de requête avec sa valeur. Vous pouvez utiliser la classe PropertyInfo pour cela.

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

La méthode GetProperties() est surchargée et peut être invoquée avec BindingFlags de sorte que les propriétés définies ne sont renvoyées (comme BindingFlags.Public pour retourner uniquement les propriétés publiques). Voir: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx

1

Je recommanderais de définir comment transformer MyObject en valeurs de chaîne de requête. Faire une méthode sur l'objet qui sait comment définir les propriétés pour toutes ses valeurs.

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

Ensuite, au lieu d'ajouter myObject, ajouter myObject.ToQueryString().

0

Voici la méthode ToString je l'ai écrit -

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; 
    }