我正在使用 ASP.NET MVC 4 并提供 RESTful Web 服务。我用 GET、POST、PUT 和 DELETE Http 方法测试了我的服务,一切似乎都很好。但是,我不知道如何将包含一些其他类或集合的数据类型作为参数传递给 POST、PUT 和 DELETE 请求。
例如,以下是我的一项 POST 服务:
public HttpResponseMessage Post(CompanyDto input)
{
if (this.ModelState.IsValid)
{
...
}
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
我从 C# 桌面应用程序调用我的服务。问题是,Compnay 对象包含 CompanyType 对象作为属性。在调用我的 POST PUT DELETE 服务时,我无法成功发送 Company 对象作为参数。有没有一种简单的方法可以将数据类型序列化为参数,无论它们包含什么类型的属性,以便 Web API 可以在服务器端自动解析并创建相应的数据类型?
以下是我如何称呼我的服务:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
byte[] postBytes = Encoding.ASCII.GetBytes(formParameter.ToString());
Stream requestStream = request.GetRequestStream();
requestStream.Write(postBytes, 0, postBytes.Length);
requestStream.Close();
formParameter 是一个对象,其 ToString 方法使用反射创建“key1=value1&key2=value2...”。下面是执行此操作的代码:
public override string ToString()
{
StringBuilder builder = new StringBuilder();
PropertyInfo[] properties = this.data.GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
builder.Append(string.Format("{0}={1}&", property.Name, property.GetValue(this.data)));
}
builder.Remove(builder.Length - 1, 1);
return builder.ToString();
}