Я использую WebAPI 2 с EF и контроллерами webapi для лесов из визуальной студии. Каждый контроллер создан с использованием 4 стандартных глаголов (GET, PUT, DELETE, POST) и 5 действий. в то время как есть две версии действия GET.WebAPI 2: Default GET ALL вызывается с неправильным параметром
IQueryable<entity> GetEntities()
Task<IHttpActionResult> GetEntity(GUID key)
// по умолчанию идентификатор INT, но я изменил GUID.
Я использую маршрутизацию атрибутов и префикс маршрута для контроллера. просто некоторые причудливые ключевые слова для лучшего управления URL. [RoutePrefix("api/v3/Company")]
Проблема:
В идеале, когда неправильный параметр передается в URL, он должен вернуть ошибку, но не поднимая ошибку, вместо этого он вернется к действию без parameter.while, если я посылаю неправильный GUID , он показывает ошибку.
Как, если я называю: http://localhost:8080/api/v3/Company/1f7dc74f-af14-428d-aa31-147628e965b2
это показывает правильный результат.
, когда я звоню: http://localhost:8080/api/v3/Company/1f7dc74f-af14-428d-aa31-147628e96500
(неверный ключ)
он устанавливается обратно в GetEntity()
функции и показывает все записи
, когда я называю: http://localhost:8080/api/v3/Company/1
(не параметр длины GUID)
его сделать то же самое и показать все записи.
Я использую атрибут [Route("{id:guid}")]
очень признателен, если я могу получить некоторые рекомендации по этому вопросу!
И какой маршрут у вас есть на 'IQueryable GetEntities()' – Nkosi
@Nkosi Из коробки нет маршрутов, определенных для действий по умолчанию. поэтому вызов api/v3/Company просто вызовет GetEntities(). Но поскольку я изменил параметр по умолчанию для GetEntity (int id) на GetEntity (Guid id), я должен явно указать этот параметр, по каким-то странным причинам он не выбирает ничего, кроме параметра id, если это не int (я не знаю причины). – Shahzad