【问题标题】:c# post complex object to php [Xamarin]c# 将复杂对象发布到 php [Xamarin]
【发布时间】:2015-04-10 01:28:39
【问题描述】:

我想要实现的是将PHP复杂对象发送到PHP,目前使用wsd-data但只从根发送属性值,即:

public class Post : Collection<Post>
{
    public string Title { get; set; }
    public string Content { get; set; }
    public File Image { get; set; }
}

byte[] fileContents = ....;

Post post = new Post();
post.Title = "Post title";
post.Content = "Post content";
post.Image = new File ("FileName.png", "image/png", fileContents);
await post.Save();

在这种情况下工作得很好,因为它在内部处理 File 情况,但是如果我添加一个嵌套依赖项,比如

public class Post : Collection<Post>
{
    public string Title { get; set; }
    public string Content { get; set; }
    public File Image { get; set; }
    public Author Author { get; set; }
}

假设 Author 是一个具有名称、id 等的类,但是当我发布它时只发送 Author.toString() 值,我尝试添加一个类似键的数组来发布到 PHP,例如:

MultipartFormDataContent form = new MultipartFormDataContent ();
form.Add (new StringContent (post.Author.Name), "Author[Name]");
form.Add (new StringContent (post.Author.Id), "Author[Id]");

await httpClient.PostAsync (url, form).ConfigureAwait (false);

然后在 PHP 中我想收到这样的东西:

<?php
echo $_POST['Author']['Name']; // must print the author name
?>

但我只是得到一个空的 $_POST['Author'] 变量,不知道如何用 c# 实现,如果我需要在内部更改如何创建表单主体,请告诉我,但想使用 form-data因为它支持文件提交。

问候

【问题讨论】:

    标签: c# php xamarin xamarin.ios dotnet-httpclient


    【解决方案1】:

    听起来使用序列化比尝试将输入作为表单数据处理更好。这段时间我没有做太多的 PHP,但我做过很多 Web 服务。只需在 Xamarin 端序列化,在 PHP 端反序列化即可。

    【讨论】:

    • 可能是一个解决方案,但我找到了一个,你的解决方案可以工作,但我已经在这个库的服务中实现了,所以如果发送数据序列化它会破坏正在运行的旧应用程序当有另一种更简单的方法来解决这个问题时,它或者会添加很多代码(在 php 端)来解决这个问题。我也很欣赏你的回答。问候
    【解决方案2】:

    我找到了一个解决方案(图书馆的一个缺陷)它的here

    基本上,我将复杂的字典递归地映射到一个非常简单的字典(具有值的一级)。即

    // Pseudo class with data
    Post {
      Id=0,
      Title="Hello world",
      List<Comment> Comments=[
        Comment { Id=0, Description="This is a comment" }
      ]
    }
    
    // Pseudo dictionary result
    
    Dictionary<string, string> data = {
      Id=0,
      Title="Hello World",
      Comments[0][Id]=0,
      Comments[0][Description]="This is a comment"
    }
    
    // And then in php get (all keys are converted to lowercase
    
    echo $_POST['id']; // 0
    echo $_POST['title']; // Hello World
    echo $_POST['comments'][0]['id']; // 0
    echo $_POST['comments'][0]['description']; // This is a comment
    

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多