Я создал новое действие web api и добавил для него новую маршрутизацию. Я не уверен, что я сделал это право, скорее всего, нет, поэтому я получаю эту ошибку.web api 2 возвращающая ошибка
Так я добавил мой метод/Действие как этот
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>
Ваш оба маршрута являются общими и соответствуют одному и тому же запросу. Просто введите код контроллера и название действия. e..g замените этот url: "{controller}/{action}/{lastUpdate}", с url: "Device/GetLatestDevice/{lastUpdate}" –
Так что я должен удалить только что созданный маршрут и просто использовать жестко закодированные URL? – Johnathon64
не заменяет первое значение URL маршрута. Должен быть один маршрут с динамическим контроллером и именем действия, чтобы другие функции не влияли. –