繁体   English   中英

如何将列表对象传递给 Web API PUT 方法 C#

[英]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.

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