当前位置: 首页 > 知识库问答 >
问题:

ASP.NET MVC Web API 4 REST WebService:放置/后置对象列表

贺劲
2023-03-14

想知道是否可能和/或支持将整个对象放置/发送到REST Webservice,而不是只放置一些名称/值对?

如果是这样,是否也可以放置/张贴对象列表?

我认为这是可能的,因为GET请求能够返回一个对象列表,所以我希望对更新的对象执行“反向”操作(而不是一次发送一个对象,或者更糟糕的是,通过名称/值对发送单个的对象)?

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;
    }

    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;
    }

共有1个答案

沈乐邦
2023-03-14

我在客户端使用了服务器上的序列化写代码,它起作用了

    public int writeAll(List<AObject> aObjects)
    {
        string url = ContructUrlRequest(null, null);

        WebRequest request = WebRequest.Create(url);
        request.Method = WebRequestMethods.Http.Put;
        request.ContentType = "application/json; charset=utf-8";            
        request.Credentials = CredentialCache.DefaultCredentials;
        ((HttpWebRequest)request).UserAgent = "going insane";

        JsonSerializerSettings serializerSettings = new JsonSerializerSettings();
        serializerSettings.TypeNameHandling = TypeNameHandling.Objects | TypeNameHandling.Arrays;
        serializerSettings.Converters.Add(new IsoDateTimeConverter());

        JsonSerializer serializer = JsonSerializer.Create(serializerSettings);

        using (Stream requestStream = request.GetRequestStream())
        {
            using (StreamWriter streamWriter = new StreamWriter(requestStream, new UTF8Encoding(false, true)))
            {
                using (JsonTextWriter jsonTextWriter = new JsonTextWriter(streamWriter))
                {
                    serializer.Serialize(jsonTextWriter, aObjects);
                }
            }
        }

        WebResponse response = request.GetResponse();

        if (response == null)
        {
            Log.Info(FIDB.TAG_WSBUFFER, "WSBuffer.writeAll: response = NULL");

            return -1;
        }

        StreamReader sr = new StreamReader(response.GetResponseStream());

        _recieveBuffer = sr.ReadToEnd();

        _resultData = JsonConvert.DeserializeObject<List<int[]>>(
            _recieveBuffer,
            new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }
        );

        return tabletData.Count;
    }
 类似资料:
  • When building your games, you'll place lots of different objects in your game world. 当你建立了游戏,你就要放置许多不同的对象到你的游戏世界中。 Focusing 聚焦 It can be useful to focus the Scene View Camera on an object before manip

  • 问题内容: 我在另一个实现Parcelable的场所对象中有一个Location对象。我该如何在我的writeToParcel方法实现中正确序列化它?所以这是一些代码: 问题答案: 在这里,您有一个片段如何将可分割对象序列化为您自己的包裹。

  • 进入具体播放器编辑页面,点击播放列表标签,设置播放列表样式。 设置播放列表的样式:选择视频封面缩略图、文本框和文字列表; 设置播放列表的位置:上、下、左、右,文字列表形式只有左右两种位置。

  • 问题内容: 我正在创建一个PDF,并在其中的某个位置添加一个JPanel。 使用和我可以将其添加到文档中,但是: 我如何定位它使其位于左边距而不是页面左侧? 如何防止其显示在其他元素之上? 换句话说:如何将其放在段落中? 代码片段: 问题答案: 我通过使用a 并从中创建一个使其工作。

  • 假设有一个结构,其构造函数没有初始化所有成员变量: 如果我将某个缓冲区设置为0,在该缓冲区上使用placement new创建一个Foo实例,然后从该实例读取x,这是定义的行为吗?

  • 我有两个程序。第一个分配共享内存文件,第二个从中读取。。我使用placement new将对象放置到此内存中,以确保对象不会使用新的或分配共享内存文件之外的任何内存。 我的阵列结构: 方案1: 方案2: > 程序一将SHMArray放置在内存中,位置为new。程序二在程序一已经放置的对象上做同样的事情(覆盖它)。这是未定义的行为吗?我认为不是,但我想确认一下。 两个程序都不调用析构函数数组- 我基