【发布时间】:2013-02-23 06:06:54
【问题描述】:
想知道是否可以和/或支持将整个对象放入/发布到 REST Web 服务,而不仅仅是一些名称/值对?
如果可以,是否也可以放置/发布对象列表?
我认为这是可能的,因为 GET 请求能够返回对象列表,我想对更新的对象进行“反向”操作(而不是一次发送一个,或者更糟,通过名称/值对在单个部分中)?
我知道这是一个非常基本的问题,但到目前为止我采取的方法是尝试对 PUT 进行编码并使其工作(如果 PUT 函数没有参数,则该工作有效,例如:
public class AObjectController : ApiController
{
public List<int[]> Put()
{
List<int[]> ret = new List<int[]>();
ret.Add(new int[] {-1, 1111});
ret.Add(new int[] {-2, 2222});
return ret;
}
如果我指定单个对象或对象列表,则会出现异常:
public List<int[]> Put(AObject object) **CASE 1**
public List<int[]> Put(List<AObject> objects) **CASE 2**
{
List<int[]> ret = new List<int[]>();
ret.Add(new int[] { -1, 1111 });
ret.Add(new int[] { -2, 2222 });
return ret;
}
案例 1: public List(int[]) Put(AObject object)
案例 2: public List(int[]) Put(List(AObject) objects)
下面是正在调用的客户端的代码:
public int writeAll(List<T> data)
{
_sendBuffer =
JsonConvert.SerializeObject(
tabletData,
new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }
);
byte[] b = StringHelper.GetBytes(_sendBuffer);
string url = ContructUrlRequest(null, null);
WebRequest request = WebRequest.Create(url);
request.Method = "PUT";
request.ContentType = "application/json";
request.ContentLength = b.Length;
request.Credentials = CredentialCache.DefaultCredentials;
((HttpWebRequest)request).UserAgent = "...";
//((HttpWebRequest)request).AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(b, 0, b.Length);
requestStream.Flush();
requestStream.Close();
}
WebResponse response = request.GetResponse();
if (response == null)
{
return -1;
}
StreamReader sr = new StreamReader(response.GetResponseStream()); ;
_recieveBuffer = sr.ReadToEnd();
List<int[]> _resultData = JsonConvert.DeserializeObject<List<int[]>>(
_recieveBuffer,
new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }
);
return data.Count;
}
谢谢。
【问题讨论】:
-
你能告诉我们你得到了什么例外吗?
-
是的,现在抓取,并发布客户端代码(正在进行中)。
-
你应该使用
HttpClient,它是官方的Web Api客户端,它支持Json.Net,msdn.microsoft.com/en-us/library/… -
@Cuong Le 我会给 HttpClient 一个机会,但我记得使用 HttpWebRequest 失败(当我在项目开始时从 web 服务读取/获取时),并且事情“刚刚工作”时我使用了普通的旧 WebRequest。我需要研究一下这是否相关,谢谢。
-
可能只是需要指定UTF-8的字符集...
标签: rest asp.net-web-api