如何将自定义用户定义的对象发布到URL?

时间:2010-08-30 15:53:04

标签: post webrequest webresponse custom-object

MyObject myobject = new MyObject();     myobject.name = “测试”;     myobject.address = “测试”;     myobject.contactno = 1234;     string url =“http://www.myurl.com/Key/1234?” + myobject;     WebRequest myRequest = WebRequest.Create(url);     WebResponse myResponse = myRequest.GetResponse();     myResponse.Close();

现在上面的方法无法正常工作,但如果我尝试以这种方式手动点击网址 -

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

谁能告诉我这里我做错了什么?

3 个答案:

答案 0 :(得分:1)

我建议定义如何将MyObject转换为查询字符串值。在对象上创建一个方法,该方法知道如何为其所有值设置属性。

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

然后添加myObject.ToQueryString()。

,而不是添加myObject

答案 1 :(得分:1)

在这种情况下,“myobject”会自动调用其ToString()方法,该方法将对象的类型作为字符串返回。

您需要选择每个属性并将其与其值一起添加到查询字符串中。您可以使用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

答案 2 :(得分:0)

这是我写的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;
    }