Asp.net web api 如何添加Web API路由以在不同字段上进行筛选

Asp.net web api 如何添加Web API路由以在不同字段上进行筛选,asp.net-web-api,routes,Asp.net Web Api,Routes,我正在尝试向MyC4WebAPI应用程序添加一个路由,该路由将根据CompID字段的值而不是EntryID表的主键返回记录 我当前的ResultsController是作为新的scaffold项构建的,因此默认的get是: // GET: api/Results public IQueryable<PlayerEntry> GetPlayerEntries() { return db.PlayerEntries; } // GET:

我正在尝试向MyC4WebAPI应用程序添加一个路由,该路由将根据CompID字段的值而不是EntryID表的主键返回记录

我当前的ResultsController是作为新的scaffold项构建的,因此默认的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行的路由?

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

属性可以是这样的:

 [Route("api/results/compid/{id}")]
但是,您需要注册属性路由,并了解您正在执行的操作,因此,请阅读Microsoft的属性路由文档:

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