Web Api使用Get返回数据集
本文关键字:返回 数据集 Get 使用 Api Web | 更新日期: 2023-09-27 18:13:01
我有一段代码,它在其中工作,因为它返回了我假设正确的对象类型
jquery $(document).ready(function () {
jQuery.support.cors = true;
$.ajax({
url: '/api/News/5',
type: 'GET',
dataType: 'json',
success: function (data) {
WriteResponses(data);
},
error: function (x, y, z) {
alert(x + ''n' + y + ''n' + z);
}
});
//Displays in a Table
function WriteResponses(allNews) {
var strResult = "<table><th>Name</th><th>Student ID</th><th>Gender</th><th>Age</th>";
$.each(allNews, function (index, news) {
strResult += "<tr><td>" + news.id + "</td><td> " + news.title + "</td><td>" + news.body + "</td><td>" + news.body + "</td></tr>";
});
strResult += "</table>";
$("#divResult").html(strResult);
}
});
Web Api
public HttpResponseMessage GetNews(int? id)
{
int groupValue = 4;
var tips = (from s in db.tblTips
.Where(d => d.@group == groupValue)
select s);
if (tips == null)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Not found for the Given ID");
}
else
{
return Request.CreateResponse(HttpStatusCode.OK, tips);
}
}
然而,这在上面工作,因为我返回IQueryable
相反,我有一个我想要返回的数据集,但它在代码中未定义(是的,我已经改变了表的变量结构中的名称,例如news。StormOut 等。
所以这就是我想要返回的,我真的不喜欢与数据集和数据表工作,所以我愿意改变它....
[Route("GetCheckBox/{id?}")]
public HttpResponseMessage GetCheckBoxes(int? id)
{
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["StormConnString"].ToString()))
{
string querystring = "SELECT StormOut, StormYes, StormNo FROM tblSignOnOff WHERE id = " + id; // 3521 "
SqlCommand cmd = new SqlCommand(querystring, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds, "Data");
}
//return ds;
return Request.CreateResponse(HttpStatusCode.OK, ds);
}
我知道您现在可能已经继续前进了,但是您不应该从web服务传递。net对象,因为它限制了调用系统的可伸缩性。
应该以标准的数据交换格式(如XML或JSON)传递回数据。在处理JQuery AJAX调用时,JSON在我的选择中具有优势,因为客户端可以按原样使用对象,并且您可以使用强类型对象。使用Nuget的Newtonsoft JSON助手,只需调用(c#)
string json = JsonConvert.SerializeObject(dataSet, Formatting.Indented);
然后从你的HTML/Javascript端:
var tr = '';
$.each(response, function (i, item) {
tr += '<tr><td>' + item.Name + '</td><td>' + item.Age + '</td><td>' + item.Gender + '</td></tr>';
});
$('#HTMLtable').append(tr);
我将。net创建的Get方法的返回类型更改为DataTable并收到此结果。方法如下:
// GET api/values
[AllowAnonymous]
public System.Data.DataTable Get() {
DataSet ds = new DataSet();
DataTable dt = new DataTable("Test");
dt.Columns.Add("Col1");
dt.Columns.Add("Col2");
DataRow dr = dt.NewRow();
dr[0] = "Column 1 value";
dr[1] = "Column 2 value";
dt.Rows.Add(dr);
dt.AcceptChanges();
return dt;
}
结果如下:
<DataTable xmlns="http://schemas.datacontract.org/2004/07/System.Data">
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Test" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Test">
<xs:complexType>
<xs:sequence>
<xs:element name="Col1" type="xs:string" minOccurs="0"/>
<xs:element name="Col2" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DocumentElement xmlns="">
<Test diffgr:id="Test1" msdata:rowOrder="0">
<Col1>Column 1 value</Col1>
<Col2>Column 2 value</Col2>
</Test>
</DocumentElement>
</diffgr:diffgram>
</DataTable>