繁体   English   中英

如何在asp.net web api中发布数据列表

[英]How to post List of data in asp.net web api

我想将我的json数据从Xamarin.Forms应用程序发布到我的asp.net web api

我的模型类

public class MyModel2
{
    public int Id { get; set; }
    public string ShopName { get; set; }
    public List<Order2> ListOrder { get; set; }
}

public class Order2
{
    public int Id { get; set; }
    public string ProductName { get; set; }
}

我的控制器代码如下:

public class MyModel2Controller : ApiController
{
    private MPTContext db = new MPTContext();

    // GET: api/MyModel2
    public IQueryable<MyModel2> GetMyModel2()
    {
        return db.MyModel2;
    }

    // GET: api/MyModel2/5
    [ResponseType(typeof(MyModel2))]
    public async Task<IHttpActionResult> GetMyModel2(int id)
    {
        MyModel2 myModel2 = await db.MyModel2.FindAsync(id);
        if (myModel2 == null)
        {
            return NotFound();
        }

        return Ok(myModel2);
    }

    // PUT: api/MyModel2/5
    [ResponseType(typeof(void))]
    public async Task<IHttpActionResult> PutMyModel2(int id, MyModel2 myModel2)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (id != myModel2.Id)
        {
            return BadRequest();
        }

        db.Entry(myModel2).State = EntityState.Modified;

        try
        {
            await db.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!MyModel2Exists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return StatusCode(HttpStatusCode.NoContent);
    }

    // POST: api/MyModel2
    [ResponseType(typeof(MyModel2))]
    public async Task<IHttpActionResult> PostMyModel2(MyModel2 myModel2)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.MyModel2.Add(myModel2);
        await db.SaveChangesAsync();

        return CreatedAtRoute("DefaultApi", new { id = myModel2.Id }, myModel2);
    }

    // DELETE: api/MyModel2/5
    [ResponseType(typeof(MyModel2))]
    public async Task<IHttpActionResult> DeleteMyModel2(int id)
    {
        MyModel2 myModel2 = await db.MyModel2.FindAsync(id);
        if (myModel2 == null)
        {
            return NotFound();
        }

        db.MyModel2.Remove(myModel2);
        await db.SaveChangesAsync();

        return Ok(myModel2);
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }

    private bool MyModel2Exists(int id)
    {
        return db.MyModel2.Count(e => e.Id == id) > 0;
    }
}

我的 RestService 代码如下:

我的模型 2 模型 1:

public async Task<MyModel2> SaveOrder()
{
    model1 = new MyModel2
    {
        ShopName = "MMSHop",
        ListOrder = new List<Order2>()
        {
            new Order2
            {
                ProductName = "MMPRoduct"
            }
        }
    };
    var data = JsonConvert.SerializeObject(model1);
    var content = new StringContent(data, Encoding.UTF8, "application/json");
    var result = await client.PostAsync(MainUrl, content);
    return model1;
}

我的按钮事件处理程序是

MyModel2 OOmodel;
private async void OnOrderPlace(object sender, EventArgs e)
{
    OOmodel = await OOrest.SaveOrder();
}

当我按下按钮时,我会得到 json 数据,例如

Json 结果图像:截图 1

但在我的asp.net web api结果上似乎是这样

Asp.net Web API结果:截图 2 如您所见, ListOrder为空,但是在我的应用程序中,我也在发送它的数据。 我还尝试使用邮递员,因为我也在我的服务器资源管理器中获得了 201 代码(成功或生成)-> Order2 表我在 Orders2 表中获得了海报值,但不在服务器上。

要强制 Web API 从请求正文中读取简单类型,请将FromBody属性添加到参数

// POST: api/MyModel2
[ResponseType(typeof(MyModel2))]
public async Task<IHttpActionResult> PostMyModel2([FromBody] MyModel2 myModel2)

然后在GetMyModel2方法中

// GET: api/MyModel2
public IQueryable<MyModel2> GetMyModel2()
{
  return db.MyModel2.Include(x => x.ListOrder);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM