Wie veröffentlichen Sie ein benutzerdefiniertes Objekt in einer URL?
-
25-09-2019 - |
Frage
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 ();
Jetzt funktioniert das obige nicht, aber wenn ich versuche, die URL auf diese Weise manuell zu treffen, funktioniert sie-
"http://www.myurl.com/Key/1234?name=Test&address=test&contactno=1234
Kann mir jemand sagen, was ich hier falsch mache?
Lösung
In diesem Fall ruft "MyObject" die Methode toString () automatisch auf, die den Typ des Objekts als Zeichenfolge zurückgibt.
Sie müssen jede Eigenschaft auswählen und zusammen mit ihrem Wert zum QueryString hinzufügen. Sie können die PropertyInfo -Klasse dafür verwenden.
foreach (var propertyInfo in myobject.GetType().GetProperties())
{
url += string.Format("&{0}={1}", propertyInfo.Name, propertyInfo.GetValue(myobject, null));
}
Die GetProperties () -Methode wird überladen und kann mit BindingFlags aufgerufen werden, so dass nur definierte Eigenschaften zurückgegeben werden (wie BindingFlags.public, um nur öffentliche Eigenschaften zurückzugeben). Sehen: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx
Andere Tipps
Ich würde empfehlen, zu definieren, wie Sie MyObject in Abfragestönewerte verwandeln können. Erstellen Sie eine Methode auf dem Objekt, das weiß, wie man Eigenschaften für alle seine Werte festlegt.
public string ToQueryString()
{
string s = "name=" + this.name;
s += "&address=" + this.address;
s += "&contactno=" + this.contactno;
return s
}
Anstatt MyObject hinzuzufügen, fügen Sie myObject.toqueryString () hinzu.
Hier ist die ToString -Methode, die ich geschrieben habe - -
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;
}