كيفية نشر كائن محدد مستخدم مخصص بعنوان URL؟
-
25-09-2019 - |
سؤال
myobject myobject = new myobject () ؛ myobject.name = "test" ؛ myobject.address = "test" ؛ myobject.contactno = 1234 ؛ url url = "http://www.myurl.com/key/1234؟
الآن ما سبق لا يعمل ولكن إذا حاولت ضرب عنوان URL يدويًا بهذه الطريقة ، فإنه يعمل-
"http://www.myurl.com/Key/1234?name=Test&address=test&contactno=1234
هل يمكن لأي شخص أن يخبرني ما الذي أفعله هنا؟
المحلول
في هذه الحالة ، يقوم "MyObject" تلقائيًا باستدعاء طريقة ToString () ، والتي تُرجع نوع الكائن كسلسلة.
تحتاج إلى اختيار كل خاصية وإضافتها إلى QueryString مع قيمتها. يمكنك استخدام فئة 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
نصائح أخرى
أوصي بتحديد كيفية تحويل myobject إلى قيم سلسلة الاستعلام. قم بعمل طريقة على الكائن الذي يعرف كيفية تعيين خصائص لجميع قيمه.
public string ToQueryString()
{
string s = "name=" + this.name;
s += "&address=" + this.address;
s += "&contactno=" + this.contactno;
return s
}
ثم بدلاً من إضافة myobject ، أضف myobject.ToququeString ().
إليكم طريقة 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;
}