如何添加Web API路由以过滤不同的字段

时间:2015-05-25 09:27:26

标签: asp.net-web-api routes

我正在尝试向MYC 4 Web API应用程序添加路由,该路由将根据CompID字段的值而不是表的主键(EntryID)返回记录。

我当前的ResultsController是作为一个新的脚手架项目构建的,因此默认的GET是:

// GET: api/Results
    public IQueryable<PlayerEntry> GetPlayerEntries()
    {
        return db.PlayerEntries;
    }

    // GET: api/Results/5
    [ResponseType(typeof(PlayerEntry))]
    public IHttpActionResult GetPlayerEntry(int id)
    {
        PlayerEntry playerEntry = db.PlayerEntries.Find(id);
        if (playerEntry == null)
        {
            return NotFound();
        }

        return Ok(playerEntry);
    }

    // GET: api/Results/CompID
    [ResponseType(typeof(PlayerEntry))]
    public IHttpActionResult PlayerEntryByCompID(int CompID)
    {
        PlayerEntry playerEntry = db.PlayerEntries.Find(CompID);
        if (playerEntry == null)
        {
            return NotFound();
        }

        return Ok(playerEntry);
    }

我可以简单地添加一个允许我使用/ api / results / compid / 1000行的路线吗?

1 个答案:

答案 0 :(得分:0)

您需要使用属性路由,以便支持新方法。相反,动作选择器无法在动作之间进行选择。

attrbute可能会像这样:

 [Route("api/results/compid/{id}")]

但是,您需要注册属性路由,并了解您正在执行的操作,因此,请阅读Microsoft的属性路由文档:Attribute Routing in ASP.NET Web API 2

注意:还有其他方法,例如使用不同的名称命名参数并在查询字符串中提供命名参数或创建需要操作名称的路由,但建议的解决方案最适合您的情况