我有一个Web API,它调用存储过程,存储过程插入/更新并在数据库中选择一条记录。插入/更新有效,尝试将使用ExecuteReader
读取的所选记录转换为HTTPResponseMessage
[HttpGet]
public HttpResponseMessage Get(string Account)
{
if (string.IsNullOrEmpty(Account))
{
return Request.CreateResponse(new { error = "Input parameters cannot be Empty or NULL" });
}
string strcon = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
SqlConnection DbConnection = new SqlConnection(strcon);
SqlDataReader reader = null;
DbConnection.Open();
SqlCommand command = new SqlCommand("[dbo].[usp_InserUpadte]", DbConnection);
command.CommandType = CommandType.StoredProcedure;
//create type table
DataTable table = new DataTable();
table.Columns.Add("AccountID", typeof(string));
table.Rows.Add(Account);
SqlParameter parameter = command.Parameters.AddWithValue("@account_TT", table);
parameter.SqlDbType = SqlDbType.Structured;
parameter.TypeName = "account_TT";
XmlReader xreader = command.ExecuteXmlReader();
List<QueryResult>qresults = new List<QueryResult>();
while (xreader.Read())
{
QueryResult qr = new QueryResult();
qr.AccountID = xreader["AccountID"].ToString();
qr.CounterSeq = xreader["CounterSeq"].ToString();
qresults.Add(qr);
}
我不确定如何在XML中构建Response,我创建了一个名为QueryResult的类,但我不确定是否可以在创建XML响应时使用它。
public class QueryResult
{
public string AccountID { get; set; }
public string CounterSeq { get; set; }
}
此外,我正在尝试在执行API时在文件中编写响应。我之前已经使用过JSON和OracleDatabase,但对此并不确定。非常感谢任何帮助。
答案 0 :(得分:1)
您只需要返回qresults
对象,它将自动序列化为XML(或JSON)。您可以阅读如何向QueryResult
类添加属性,以便按照您希望的方式获取xml结构JSON and XML Serialization in Web API
我还建议您返回IHttpActionResult
而不是建立HttpResponseMessage
。然后,您只需在邮件末尾执行此操作,它将根据http ACCEPT
标题自动序列化:
[HttpGet]
public IHttpActionResult Get(string Account)
{
// rest of implementation left out for readability...
return Ok(qresults);
}