Asp.net webapi和实体框架如何使用发布的json数组

Asp.net webapi和实体框架如何使用发布的json数组,asp.net,entity-framework,asp.net-mvc-4,asp.net-web-api,asp.net-web-api2,Asp.net,Entity Framework,Asp.net Mvc 4,Asp.net Web Api,Asp.net Web Api2,我尝试为我的asp.net web API编写一个post方法 方法应该是 1.接收Json格式的数据字符串,其中包含单个对象和一个子数组。 2.将其写入我的数据库中的两个表中,并具有1:n关系 如果有人能帮助我,那就太好了。 我不知道如何才能实现这一点 Json数据的示例: 这是我现在的Post方法,但它会生成一个500错误: 谢谢你的回答 我明白了 看这里: public HttpResponseMessage PostReicheite(ReichweitePointsDto reich

我尝试为我的asp.net web API编写一个post方法

方法应该是 1.接收Json格式的数据字符串,其中包含单个对象和一个子数组。 2.将其写入我的数据库中的两个表中,并具有1:n关系

如果有人能帮助我,那就太好了。 我不知道如何才能实现这一点

Json数据的示例:

这是我现在的Post方法,但它会生成一个500错误:


谢谢你的回答

我明白了

看这里:

 public HttpResponseMessage PostReicheite(ReichweitePointsDto reichw)
        {

            if (ModelState.IsValid)
            {

                var reichwe = new Reichweite()
                {

                    Geschlecht = reichw.Geschlecht,
                    Name = reichw.Name,
                    CpGRP = reichw.CPGRP,
                    Potenzial = reichw.Potenzial,
                    ZielGRP = reichw.ZielGRP,
                    Benutzer = reichw.Benutzer,
                    PointListe = (from item in reichw.PointListe
                                  select new Points()
                                      {
                                          GRP = item.GRP,
                                          RW_TV = item.RW_TV,
                                          Cost_TV = item.Cost_TV,
                                          Rw_ZuWGS = item.RW_Zuwgs,
                                          Cost_I_Rea = item.Cost_I_Rea,
                                      }).ToList()
                };

                db.Reichweites.Add(reichwe);
                db.SaveChanges();

                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, reichwe);
                response.Headers.Location = new Uri(Url.Link("DefaultAPI", new { id = reichwe.Id }));
                return response;
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
         }
现在Post方法正是我所需要的。 只有一个bug,我的状态是500你能告诉我为什么吗


最好的

你把事情弄糊涂了,你说你想传递一个带有点子数组的单个对象,但是你的方法接受一个点类型参数,我看不到它的声明?此外,json显示您发送了该对象的数组。你能仔细检查一下吗?用try/catch包装你的代码,看看实际的异常是什么。
// POST api/TVKurve

        [ResponseType(typeof(Points))]
        public async Task<IHttpActionResult> PostPoints(Points points)
        {
            //if (!ModelState.IsValid)
            //{
            //    return BadRequest(ModelState);
            //}

            db.Points.Add(points);
            await db.SaveChangesAsync();

            db.Entry(points).Reference(x => x.Reichweite).Load();
            var dto = new ReichweitePointsDto()
            {
                ReichweiteID = points.ReichweiteId,
                Sex = points.Reichweite.Geschlecht,
                Name = points.Reichweite.Name,
                CPGRP = points.Reichweite.CpGRP,
                Potenzial = points.Reichweite.Potenzial,
                ZielGRP = points.Reichweite.ZielGRP,
                User = points.Reichweite.Benutzer,
                PointList = new List<PointListDto>(),

            };

            return CreatedAtRoute("DefaultApi", new { id = points.Id }, points);
        }
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace xms_ef_vers1.Models
{
    public class PointListDto
    {

        public PointListDto() { }

        public PointListDto(Points item)
        {
            ID = item.Id;
            GRP = item.GRP;
            RW_TV = item.RW_TV;
            Cost_TV = item.Cost_TV;
            RW_Zuwgs = item.Rw_ZuWGS;
            Cost_I_Rea = item.Cost_I_Rea;
            ReichweiteID_F = item.ReichweiteId;
        }

        [Key]
        public int ID { get; set;}

        [Required]
        public int GRP { get; set; }


        public decimal RW_TV { get; set; }
        public double Cost_TV { get; set; }
        public decimal RW_Zuwgs { get; set; }
        public decimal Cost_I_Rea { get; set; }
        public int ReichweiteID_F { get; set; }

        public Points ToEntity()
        {
            return new Points
            {
                Id = ID,
                GRP = GRP,
                RW_TV = RW_TV,
                Cost_TV = Cost_TV,
                Rw_ZuWGS = RW_Zuwgs,
                Cost_I_Rea = Cost_I_Rea,
                ReichweiteId = ReichweiteID_F,

            };
        }

    }
}
 public HttpResponseMessage PostReicheite(ReichweitePointsDto reichw)
        {

            if (ModelState.IsValid)
            {

                var reichwe = new Reichweite()
                {

                    Geschlecht = reichw.Geschlecht,
                    Name = reichw.Name,
                    CpGRP = reichw.CPGRP,
                    Potenzial = reichw.Potenzial,
                    ZielGRP = reichw.ZielGRP,
                    Benutzer = reichw.Benutzer,
                    PointListe = (from item in reichw.PointListe
                                  select new Points()
                                      {
                                          GRP = item.GRP,
                                          RW_TV = item.RW_TV,
                                          Cost_TV = item.Cost_TV,
                                          Rw_ZuWGS = item.RW_Zuwgs,
                                          Cost_I_Rea = item.Cost_I_Rea,
                                      }).ToList()
                };

                db.Reichweites.Add(reichwe);
                db.SaveChanges();

                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, reichwe);
                response.Headers.Location = new Uri(Url.Link("DefaultAPI", new { id = reichwe.Id }));
                return response;
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
         }