Asp.net web api 区分ASP.NET WEB API中包含查询字符串的Get方法

Asp.net web api 区分ASP.NET WEB API中包含查询字符串的Get方法,asp.net-web-api,asp.net-web-api-routing,Asp.net Web Api,Asp.net Web Api Routing,我有一个ASP.NET Web Api,其中包含以下Get方法: [RoutePrefix("api/contact")] public class ContactController : ApiController { private ContactContext db = new ContactContext(); public IEnumerable<Contact> Get() { return db.Contacts.AsEnume

我有一个ASP.NET Web Api,其中包含以下Get方法:

[RoutePrefix("api/contact")]
public class ContactController : ApiController
{
    private ContactContext db = new ContactContext();

    public IEnumerable<Contact> Get()
    {
        return db.Contacts.AsEnumerable();
    }



    [Route("{id:int}")]
    public Contact Get(int id)
    {
        var result = db.Contacts.Find(id);
        if (result == null)
        {


            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }
        return result;
    }

    public IEnumerable<Contact> GetContacts([FromUri]Filter filter)
    {
        return db.Contacts.Where(c => c.DepartmentId == filter.DepartmentId && c.City == filter.City).ToList();
    }
}
我的问题是如何为查询添加属性路由,因为 目前它无法区分Get方法,返回错误

{"Message":"An error has occurred.","ExceptionMessage":"Multiple actions were found that match the request: \r\nSystem.Collections.Generic.IEnumerable`1[MyFirstWebApi.Models.Contact] Get() on type MyFirstWebApi.Controllers.ContactController\r\nSystem.Collections.Generic.IEnumerable`1[MyFirstWebApi.Models.Contact] GetContacts(MyFirstWebApi.Models.Filter) on type MyFirstWebApi.Controllers.ContactController","ExceptionType":"System.InvalidOperationException","StackTrace":" at System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\r\n at System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\r\n at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext()"}

我尝试添加路由属性以获取包含
id
的方法,但没有成功。

属性路由或常规路由不支持模板中的查询参数。相反,您可以修改控制器,使其仅具有以下两个操作:

// Here if no DepartmentId or City are provided, then the 'filter' parameter would be null
[Route]
public IEnumerable<Contact> GetContacts([FromUri]Filter filter)

[Route("{id:int}")]
public Contact Get(int id)
//此处如果未提供部门ID或城市,则“filter”参数将为null
[路线]
公共IEnumerable GetContacts([FromUri]筛选器)
[路由(“{id:int}”)]
公共联系人获取(int id)

谢谢……这区分了过滤方法,但现在必须将Get'All Contact'方法与过滤方法相结合……这对我来说很有效……但我想知道是否有办法区分它们……谢谢@基兰查拉:我也面临同样的问题。感谢你的具体答复。
// Here if no DepartmentId or City are provided, then the 'filter' parameter would be null
[Route]
public IEnumerable<Contact> GetContacts([FromUri]Filter filter)

[Route("{id:int}")]
public Contact Get(int id)