ASP.NET 核心 WebApi Return 按属性列出的所有值

ASP.NET Core WebApi Return All Values by Attribute

我的 WebApi 有一个 table 用于具有以下 class 的应用程序:

namespace Models.Public
{
    [Index(nameof(UUID), nameof(UID), IsUnique = true)]
    public class Application
    {
        public Application()
        {
            this.UUID = new Guid();
        }

        public int ID { get; set; }
        public Guid UUID { get; set; }
        [Required]
        public string UID { get; set; }
        public string Publisher { get; set; }
        public string Name { get; set; }
        public string Version { get; set; }
    }
}

字段 UUIDID 是唯一的,因此我能够生成所需的 HttpGet 命令以获得与之匹配的结果。

但是,我正在尝试获取与 Publisher 字段匹配的所有项目的 IEnumerable 对象。也就是说,return 所有发布者为 "Google" 的对象。

我的尝试没有成功,我希望得到一些建议来修复我的代码:

// GET: api/Application/<publisher>
[HttpGet("{publisher}")]
public async Task<ActionResult<IEnumerable<Application>>> GetApplication(string publisher)
{
    var application = await _context.Application.ToListAsync(publisher);

    if (application == null)
    {
        return NotFound();
    }

    return await _context.Application.ToListAsync();
}

Publisher 不是唯一值,因此我希望能够 return 所有项目作为 JSON 对象,其中包含我在列表中键入的任何 Publisher。如果没有匹配,错误处理 NotFound();.

您需要使用 .Where.Contains

进行过滤
// GET: api/Application/<publisher>
[HttpGet("{publisher}")]
public async Task<ActionResult<IEnumerable<ApplicationData>>> GetApplication(string publisher)
{
    var applications = _context.Application.Where(a=>a.Publisher.Contains(publisher)));

   /* You could also use == for exact match
      var applications = _context.Application.Where(a=>a.Publisher == publisher));
   */

    if (applications.Count() == 0)
    {
        return NotFound();
    }

    return await applications.ToListAsync();
}