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