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?

Était-ce utile?

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;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top