我有一个web api控制器,它通过字符串扩展Linq动态来做ApplySort。
我可以通过几个排序,即: sort=id,名称,日期创建到这个web api中。但是在做Linq之前,我需要验证这些字符串(Id、Name、DateCreated等)存在于模型/类的属性中。我该怎么做?
[HttpGet]
[Route("api/Activities/{sort=id}/{pagenumber=1}/{pagesize=10}")]
[CacheOutput(ClientTimeSpan = 60, ServerTimeSpan = 60)]
public async Task<IHttpActionResult> GetActivities(string sort, int pageNumber, int pageSize)
{
string userId = User.Identity.GetUserId();
var activities = await (db.Activities.Where(q => q.UserId == userId)
.AsQueryable().ApplySort(sort)
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)).ToListAsync();
return Ok(activities);
}发布于 2019-09-13 13:09:33
您可以使用GetProperties():
[HttpGet]
[Route("api/Activities/{sort=id}/{pagenumber=1}/{pagesize=10}")]
[CacheOutput(ClientTimeSpan = 60, ServerTimeSpan = 60)]
public async Task<IHttpActionResult> GetActivities(string sort, int pageNumber, int pageSize)
{
string userId = User.Identity.GetUserId();
var propertyNames = typeof (Activity).GetProperties().Select(p=>p.Name).ToList();
var sorts = sort.Split(',').Select(s=> s.Trim());
foreach(var sortPart in sorts)
{
if(propertyNames.IndexOf(sortPart)<0)
{
throw//what ever should be done in error-case
}
}
var activities = await (db.Activities.Where(q => q.UserId == userId)
.AsQueryable().ApplySort(sort)
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)).ToListAsync();
return Ok(activities);
}https://stackoverflow.com/questions/57917428
复制相似问题