簡體   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