c# - 当角度 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 发布)。
任何帮助将不胜感激。
解决方案
您可以将 [FromBody] 添加到您的参数
public HttpResponseMessage InsertRota([FromBody] Models.HelpdeskStaffRota paraStaffRota)
{
// code
}
推荐阅读
- reactjs - 如何导出命名空间中的打字稿接口以在另一个模块中使用?
- php - 没有写入php文件
- javascript - 如何通过存储在 Firebase 存储中的谷歌文档查看器在 iframe 中显示 pdf 文档?
- ios - 连接音频记录以在 AudioKit 中播放
- javascript - javascript 中的函数适用于日期选择器和列表框,但现在它不起作用
- wxpython - wxPython:更改组合框选项
- angular - 如何在 Angular 中将输入元素居中?
- c# - ToolbarItems 计数在视图模型中为 0
- bash - bash 默认情况下是否在 /usr/local/etc/bash_completion.d 中提供 bash 完成文件?
- excel - 忽略 NA() 数据的 MAXIFS 多个条件