Създадох ново действие за уеб 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>