首页 > 解决方案 > 当角度 http.post 具有正确值时,为什么 obj 值在 asp Web API2 控制器中为空

问题描述

我正在做一个小项目,用 ASP WebAPI2 学习 Angular7。当我使用 http.post() 发布时,ASP Web API 控制器没有收到任何值,并且 obj 设置为 null。

我试图在应用程序的其他部分实现类似的代码并且工作正常。

我的 WebAPI 看起来像这样 -

        [Route("api/rota/InsertRota")]
        [HttpPost]
        public HttpResponseMessage InsertRota(Models.HelpdeskStaffRota paraStaffRota)
        {
            try
            {
                string conString = ConfigurationManager.ConnectionStrings["HelpdeskStaffRota"].ConnectionString;
                using (SqlConnection conn = new SqlConnection(conString))
                using (SqlCommand comm = new SqlCommand("RotaInsert", conn))
                {
                    conn.Open();
                    comm.CommandType = System.Data.CommandType.StoredProcedure;

                    comm.Parameters.Add(new SqlParameter("@RotaDate", paraStaffRota.RotaDate));
                    comm.Parameters.Add(new SqlParameter("@RotaMorning", paraStaffRota.RotaMorning));
                    comm.Parameters.Add(new SqlParameter("@RotaLunch", paraStaffRota.RotaLunch));
                    comm.Parameters.Add(new SqlParameter("@RotaLate", paraStaffRota.RotaLate));
                    comm.ExecuteNonQuery();
                    conn.Close();
                }
                List<Models.HelpdeskStaffRota> items = GetItems();
                return Request.CreateResponse(HttpStatusCode.OK, items);
            }
            catch (System.Exception e)
            { return Request.CreateResponse(HttpStatusCode.SeeOther, e.Message); }
        }

和 asp 模型 -

    public class HelpdeskStaffRota
    {
        public Int64 Id { get; set; }

        [Required(ErrorMessage = "Please select a date")]
        public DateTime RotaDate { get; set; }

        [Required(ErrorMessage = "Please select a Staff for Morning")]
        public string RotaMorning { get; set; }

        [Required(ErrorMessage = "Please select a Staff for Lunch")]
        public string RotaLunch { get; set; }

        [Required(ErrorMessage = "Please select a Staff for Late")]
        public string RotaLate { get; set; }

        public string RotaDateString {
            get
            {
                return this.RotaDate.ToString("dd/MM/yyyy");
            }
            set
            {
                this.RotaDate = DateTime.ParseExact(value, "dd/MM/yyyy", CultureInfo.InvariantCulture);
            }


        }


    }

还有 Angular 服务——

  addRota(rota: Rota) {
    const addRotaURL = `${this.baseURL}api/rota/InsertRota`;
    return this.http.post(addRotaURL, rota);
  }

和角度轮班 -

export class Rota {
    Id: number;
    RotaDate: Date;
    RotaMorning: string;
    RotaLunch: string;
    RotaLate: string;
}

如果我进入调试模式,我可以看到角度代码确实设置了一个对象值,并且我可以看到它到达控制器内部的断点,但是 paraStaffRota 的值为 null。我的期望是 paraStaffRota(web api controller) = rota (从 angular 发布)。

任何帮助将不胜感激。

标签: c#angularangular7

解决方案


您可以将 [FromBody] 添加到您的参数

public HttpResponseMessage InsertRota([FromBody] Models.HelpdeskStaffRota paraStaffRota)
{
 // code
}

推荐阅读