我想在API端的控制器类中编写一个方法,以返回所有列名的列表。该方法将是什么样子,它将返回什么?以及如何在客户端检索此“列表”?
private CoreGradingDBEntities db = new CoreGradingDBEntities();
// GET: api/
public IQueryable<Account> GetAccounts()
{
return db.Accounts;
}
//Get field names
//What is the response type
public IHttpActionResult GetFieldNames()
{
//Query goes here, gets executed and returns all column names?
}
// GET: api/Accounts/5
[ResponseType(typeof(Account))]
public IHttpActionResult GetAccount(string id)
{
Account account = db.Accounts.Find(id);
if (account == null)
{
return NotFound();
}
return Ok(account);
}
一个查询,该查询返回我想执行并作为HTTP响应获取的列名。
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Account'
ORDER BY ORDINAL_POSITION
答案 0 :(得分:0)
有两种方法可以完成此任务:
另一个是访问use reflection的帐户类型属性:
typeof(Account).GetProperties(BindingFlags.Public|BindingFlags.Instance)
答案 1 :(得分:0)
因此,我添加了一个新的控制器类,它是一个不依赖于数据库的自定义类。我还向WebApiConfig.cs文件添加了一条新路由。以及新的“模板”类。这就是我所拥有的。
WebApiConfig.cs(添加的代码)
请注意,该ID是必填项。我将使用它作为希望从中获取字段名称的表名。
config.Routes.MapHttpRoute(
name: "FieldValues",
routeTemplate: "api/FieldValues/id",
defaults: new { controller = "FieldValues"}
);
FieldValues.cs(新类)
public class FieldValues
{
public string COLUMN_NAME { get; set; } //this "variables" name is same as in query. Note: if the set is not present nulls would be returned
}
FieldValuesController.cs(新控制器)
public class FieldValuesController : ApiController
{
private CoreGradingDBEntities db = new CoreGradingDBEntities();
[Route("api/FieldValues/id")]
public IList<FieldValues> Get(string id)
{
var response = db.Database.SqlQuery<FieldValues>("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + id + "' ORDER BY ORDINAL_POSITION").ToList();
return response;
}
}
JSON响应
[{"$id":"1","COLUMN_NAME":"ID"},{"$id":"2","COLUMN_NAME":"DepartmentID"},{"$id":"3","COLUMN_NAME":"PermissionID"},{"$id":"4","COLUMN_NAME":"Username"},{"$id":"5","COLUMN_NAME":"PasswordHash"},{"$id":"6","COLUMN_NAME":"PasswordResetToken"},{"$id":"7","COLUMN_NAME":"TokenValid"},{"$id":"8","COLUMN_NAME":"Email"},{"$id":"9","COLUMN_NAME":"EmailConfirmed"},{"$id":"10","COLUMN_NAME":"PhoneNumber"},{"$id":"11","COLUMN_NAME":"PhoneNumberConfirmed"},{"$id":"12","COLUMN_NAME":"TwoFactorEnabled"},{"$id":"13","COLUMN_NAME":"AccessFailedCount"},{"$id":"14","COLUMN_NAME":"LocoutEndDate"},{"$id":"15","COLUMN_NAME":"LockoutEnabled"}]
获取请求
api/FieldValues/id?id={id}
使用
api/FieldValues/id?id=Account //the 'Account' can be replaced by your table name you wish to get the values from