[英]How to Pass List object to Web API PUT method C#
我试图将 List 传递给我的 Web API,但我总是得到一个空值。 我将列表转换为字符串,然后再将其传递给 API。 如何将列表发送到 API 并正确更新数据? 请帮我找出正确的代码。 类:MatrixProcessData.cs
namespace AHS.IBP.BO
{
[Serializable, DataContract]
public class MatrixProcessData
{
#region Variables
// private int _id;
private int _processYear;
private DateTime _processDate;
#endregion
#region Constructor
public MatrixProcessData()
{
// _id = 0;
_processYear = 0;
_processDate = DateTime.Today;
}
#endregion
#region Properties
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Key]
// [DataMember]
//public int ID { get { return _id; } set { _id = value; } }
[DataMember]
public int ProcessYear
{
get { return _processYear; }
set { _processYear = value; }
}
[DataMember]
public DateTime ProcessDate
{
get { return _processDate; }
set { _processDate = value; }
}
#endregion
}
}
API调用方法:
public void ProcessData()
{
DataSet dsProcessData = new DataSet();
dsProcessData = new TempMatrixClass().GetProcessData(DateTime.Now.Year,771);
List<MatrixProcessData> li = new List<MatrixProcessData>();
if (dsProcessData.Tables[0].Rows.Count > 0)
{
foreach (DataRow dr in dsProcessData.Tables[0].Rows)
{
MatrixProcessData mtrixProcessData = new MatrixProcessData();
mtrixProcessData.ProcessYear = Convert.ToInt32(dr["ProcessYear"]);
mtrixProcessData.ProcessDate = Convert.ToDateTime(dr["ProcessDate"]);
li.Add(mtrixProcessData);
}
string apiUrl = string.Format("{0}api/MatrixProcessData/{1}/", aplilink, 2019);
HttpClient httpClient = new HttpClient();
httpClient.MaxResponseContentBufferSize = 256000;
string strObject = Newtonsoft.Json.JsonConvert.SerializeObject(li, Newtonsoft.Json.Formatting.None);
HttpContent httpContent = new StringContent(strObject, Encoding.UTF8, "application/json");
var response = httpClient.PutAsync(apiUrl, httpContent, new System.Threading.CancellationToken(false)).Result;
if (response != null && response.IsSuccessStatusCode)
{
var data = response.Content.ReadAsStringAsync().Result;
// mtrixProcessData = Newtonsoft.Json.JsonConvert.DeserializeObject<MatrixProcessData>(data);
}
}
}
控制器 PUT API 方法(列表)为空:MatrixProcessDataController.cs
[Route("{processyear}")]
[ResponseType(typeof(List<MatrixProcessData>))]
public IHttpActionResult PutmatrixProcessData(int processyear, List<MatrixProcessData> matrixProcessData)
{
foreach (var item in matrixProcessData)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Entry(matrixProcessData).State = EntityState.Modified;
if (!matrixProcessDataExists(item.ProcessYear, item.ScenarioID, item.ModuleID, item.MeasureID, item.SKUID, item.ProcessDate))
{
db.MatrixProcessDatas.Add(item);
}
db.SaveChanges();
}
return StatusCode(HttpStatusCode.NoContent);
}
不确定您的处理代码是否有任何其他问题,但对于控制器代码,您需要指定数据绑定发生的位置,具体取决于您发出 HTTP 请求的方式。 您可能需要[FromBody]
或[FromForm]
:
[Route("{processyear}")]
[ResponseType(typeof(List<MatrixProcessData>))]
public IHttpActionResult PutmatrixProcessData([FromRoute]int processyear, [FromBody] List<MatrixProcessData> matrixProcessData)
{
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.