Comment poster un objet défini par l'utilisateur personnalisé à une URL?
-
25-09-2019 - |
Question
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 ();
Maintenant, le travail ne marche pas dessus, mais si je tente de frapper manuellement l'URL de cette façon il fonctionne -
"http://www.myurl.com/Key/1234?name=Test&address=test&contactno=1234
Quelqu'un peut-il me dire ce que je fais mal ici?
La solution
Dans ce cas, « myobject » appelle automatiquement la méthode ToString (), qui renvoie le type de l'objet sous forme de chaîne.
Vous devez choisir chaque propriété et l'ajouter à la chaîne de requête et 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 ne sont définies retournés (comme BindingFlags.Public pour retourner uniquement les propriétés publiques). Voir: http://msdn.microsoft.com/en-us/library/ kyaxdd3x.aspx
Autres conseils
Je recommande 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 ().
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;
}