簡體   English   中英

計數 web api 中的記錄?

[英]count records in web api?

我想問一下如何使用 web api 中的數據獲取總計數。 我已經嘗試使用if子句來計算總記錄,但它只顯示總計數並且數據沒有以 xml 格式顯示。

無論如何都沒有If子句嗎?

json 格式的示例:

{
  Count: 2
   [
    {
     "userid": 1,
     "name": "emily",
     "mobile": "98724954",
     "Age": 24,
     "Date": 2020-10-04T21:05:00
     },
     "userid": 2,
     "name": "peter",
     "mobile": "42896592",
     "Age": 35,
     "Date": 2021-05-25T11:20:00
     }
    ]

如何像 xml 格式的示例一樣進行計數?

問題:如何在 web api 中統計數據或響應並顯示數據以及 xml 格式?

我的代碼:


        [HttpGet]
        public IHttpActionResult Get()
        {
            List<TestClass> draft = new List<TestClass>();
            string mainconn = ConfigurationManager.ConnectionStrings["myconn"].ConnectionString;
            SqlConnection sqlconn = new SqlConnection(mainconn);
            string sqlquery = "SELECT UserID, Name, Mobile, Age, Date From tbluser";
            sqlconn.Open();
            SqlCommand sqlcomm = new SqlCommand(sqlquery, sqlconn);
            SqlDataReader sdr = sqlcomm.ExecuteReader();
            while (sdr.Read())
                {
                    draft.Add(new TestClass()
                    {
                        UserId = sdr.GetString(0),
                        Name = sdr.GetString(1),
                        Mobile = sdr.GetString(2),
                        Age = sdr.GetInt32(3),
                        Date = sdr.GetDateTime(4)
                    });
                }
            return Ok(draft);
        }
        if(test.Count>0)
        {
             return Ok(test.Count());
        }
        else
        {
             return Ok("None");
        };

結果:

<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">10</int>

class:

public class TestClass
    {

        public string UserId { get; set; }

        public string Name { get; set; }

        public string Mobile { get; set; }

        public int Age { get; set; }

        public DateTime Date { get; set; }
    }

更新

    [HttpGet]
    public IHttpActionResult Get()
    {
        List<TestClass> draft = new List<TestClass>();
        string mainconn = ConfigurationManager.ConnectionStrings["myconn"].ConnectionString;
        SqlConnection sqlconn = new SqlConnection(mainconn);
        string sqlquery = "SELECT UserID, Name, Mobile, Age, Date From tbluser";
        sqlconn.Open();
        SqlCommand sqlcomm = new SqlCommand(sqlquery, sqlconn);
        SqlDataReader sdr = sqlcomm.ExecuteReader();
        while (sdr.Read())
            {
                draft.Add(new TestClass()
                {
                    UserId = sdr.GetString(0),
                    Name = sdr.GetString(1),
                    Mobile = sdr.GetString(2),
                    Age = sdr.GetInt32(3),
                    Date = sdr.GetDateTime(4)
                });
            }
        var apiResult = new ApiResult
        {
            Count = api.Length,
            Data = api
        };
        var result= Ok(apiResult);
    }

您沒有給出您期望 output 的示例,因此很難確切知道您希望 XML 的外觀如何。 另請注意,您的(無效) JSON 示例與您的TestClass不匹配,因此我假設您的TestClass是正確的。

首先,添加一個包裝器 class 以便您也可以將Count序列化為 XML :

public class TestApiResult
{
    public int Count { get; set; }
    public List<TestClass> Data { get; set; }
}

更新您的 controller 操作以將您的數據放入此 class 的實例中:

[HttpGet]
public IHttpActionResult Get()
{
    string mainconn = ConfigurationManager.ConnectionStrings["myconn"].ConnectionString;
    using var sqlconn = new SqlConnection(mainconn);
    string sqlquery = "SELECT UserID, Name, Mobile, Age, Date From tbluser";
    sqlconn.Open();
    using var sqlcomm = new SqlCommand(sqlquery, sqlconn);
    using var sdr = sqlcomm.ExecuteReader();

    var data = new List<TestClass>();
    while (sdr.Read())
    {
        data.Add(new TestClass()
        {
            UserId = sdr.GetString(0),
            Name = sdr.GetString(1),
            Mobile = sdr.GetString(2),
            Age = sdr.GetInt32(3),
            Date = sdr.GetDateTime(4)
        });
    }

    // The important bit:
    var apiResult = new ApiResult
    {
        Count = data.Count,
        Data = data
    };
    var result= Ok(apiResult);
}

這將作為示例導致以下 XML:

<?xml version="1.0" encoding="utf-8"?>
<TestApiResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Count>3</Count>
  <Data>
    <TestClass>
      <UserId>fooID</UserId>
      <Name>fooName</Name>
      <Mobile>fooMobile</Mobile>
      <Access>1</Access>
      <Date>2022-08-11T00:00:00+00:00</Date>
    </TestClass>
    <TestClass>
      <UserId>barID</UserId>
      <Name>barName</Name>
      <Mobile>barMobile</Mobile>
      <Access>2</Access>
      <Date>2022-08-12T00:00:00+00:00</Date>
    </TestClass>
    <TestClass>
      <UserId>bazID</UserId>
      <Name>bazName</Name>
      <Mobile>bazMobile</Mobile>
      <Access>3</Access>
      <Date>2022-08-13T00:00:00+00:00</Date>
    </TestClass>
  </Data>
</TestApiResult>

注意:我在您的代碼中添加了一些using語句。 重要的是要記住,以便在您不再使用 object 時正確處理應用程序資源。 請參閱using文檔以獲取更多信息。

檢查這個小提琴進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM