复杂的参数没有到达web api服务器

时间:2018-01-26 16:52:07

标签: c# asp.net asp.net-web-api

我正在尝试从我的mvc项目到web api的put操作。我有两个参数,一个是整数类型,另一个是复杂类型 对服务器的调用 当复杂类型为null时,简单类型将到达服务器。邮递员工作得很好......我需要知道我做错了什么

这是我的模特

public void Serialize(object oToSerialize)
{
    XmlSerializer xmlSerializer =  new XmlSerializer(oToSerialize.GetType());
    XmlDocument xDoc = new XmlDocument();
    using (var stream = new MemoryStream())
    {
        xmlSerializer.Serialize(stream, oToSerialize);
        stream.Flush();
        stream.Seek(0, SeekOrigin.Begin);
        xDoc.Load(stream);
    }
}

这是我的客户端代码

//Same with client side
public class PaymentTypeVM
{
    public int Id { get; set; }

    public string Name { get; set; }
}

这是服务器代码

    public static async Task<RequestResult> EditPaymentType<T>(int id, T model)
    {

        var content = new { Model = model };

        var str = JsonConvert.SerializeObject(content);


        var resp = await _client.PutAsync($"api/admin/editpaymenttype/{id}", new StringContent(str, Encoding.UTF8, "application/json"));

        var txt = await resp.Content.ReadAsStringAsync();

        return JsonConvert.DeserializeObject<RequestResult>(txt);
    }

我需要一个简单的答案,因为我是新手,提前致谢。

3 个答案:

答案 0 :(得分:1)

假设您像这样致电from django.conf import settings class Company(models.Model): name = models.CharField(max_length=200) shareholder = models.ManyToManyField(settings.AUTH_USER_MODEL, through='Foo', blank=True) class Foo(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) company = models.ForeignKey('Company', on_delete=models.CASCADE) number_of_shares = models.FloatField() EditPaymentType

在客户端更改此部分...

EditPaymentType<PaymentTypeVM>

到此......

var content = new { Model = model };
var str = JsonConvert.SerializeObject(content);

您当前正在向它发送一个序列化对象,其属性为var str = JsonConvert.SerializeObject(model); ,其值为您的模型,但在反序列化时尝试将其映射到Model类型的参数服务器。

如果类型不匹配,则它无法将正文内容反序列化为参数,并且最终为空。

答案 1 :(得分:1)

你应该改变它。

new A { arr = { 10, 20, 30} }

new A { arr = new int[3]{ 10, 20, 30} }

不要将var content = new { Model = model }; var str = JsonConvert.SerializeObject(content); 作为嵌套对象发送。

答案 2 :(得分:0)

HttpClient发送一个具有以下结构的参数:

{
    Model =
    {
        Id = 1,
        Name = "Name"
    }
}

同时,WebApi服务器需要这样的参数:

{
    Id = 1,
    Name = "Name"
}