0
我有一個ASP.NET網頁API包含以下get方法:區分GET方法中的ASP.NET Web API包含查詢字符串
[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();
}
}
在功能public IEnumerable<Contact> GetContactsfilter([FromUri]Filter filter)
DepartementId &市在查詢字符串像
localhost:12345/api/Contact?DepartmentId=2&city=Mumbai
我的問題是我如何爲查詢添加屬性路由,因爲 目前它不能區分Get Methods和返回錯誤
{"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
但沒有奏效。
謝謝...區分過濾方法,對我來說......但我想知道是否有辦法區分它們......謝謝! –
@KiranChalla我正面臨同樣的問題。一個具體的答覆讚賞。 – lbrahim