Я создал новое действие веб-API и добавил для него новую маршрутизацию. Я не уверен, что сделал это правильно, скорее всего, нет, поэтому я получаю эту ошибку.
Итак, я добавил свой метод/действие, подобное этому
public IQueryable<Devices> GetLatestDevice(DateTime? latestUpdate)
{
return db.devices.Where(dev => dev.UpdatedDate > latestUpdate); ;
}
а это моя таблица маршрутизации
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//routes.IgnoreRoute("");
routes.MapRoute(
name: "Device",
url: "{controller}/{action}/{lastUpdate}",
defaults: new { controller = "Home", action = "Index", lastUpdate = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
и вот как я пытаюсь получить данные:
http://localhost:53658/api/DevicesAPI/21-01-2001
<Error><Message>An error has occurred.</Message><ExceptionMessage>Multiple actions were found that match the request:
GetLatestDevice on type WhitespiderMonitor.Controllers.DevicesAPIController
GetDevices on type WhitespiderMonitor.Controllers.DevicesAPIController</ExceptionMessage><ExceptionType>System.InvalidOperationException</ExceptionType><StackTrace> at System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)
at System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)
at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()</StackTrace></Error>
Я предполагаю, что, поскольку маршруты почти одинаковы, он не может различить их, поэтому мои вопросы действительно таковы, прав ли я в том, что они одинаковы, и как мне получить его, чтобы он выбрал дату. При необходимости можно предоставить дополнительную информацию, спасибо!
Я не обновлял таблицу маршрутов до
routes.MapRoute(
name: "Device",
url: "DevicesAPI/GetLatestDevice/{lastUpdate}",
defaults: new { lastUpdate = UrlParameter.Optional }
);
и теперь получить эту ошибку:
<Error><Message>The request is invalid.</Message><MessageDetail>The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int64' for method 'System.Web.Http.IHttpActionResult GetDevices(Int64)' in 'WhitespiderMonitor.Controllers.DevicesAPIController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.</MessageDetail></Error>