У меня есть следующее определение API
[RoutePrefix("api/lead/1.0")]
public class LeadController:ApiController
{
[Route("/{id:integer}/request-td")]
[HttpPost]
public IHttpActionResult SubmitLead(int id,
FromBody]FormData FormData)
{
}
}
Когда мой отдел контроля качества тестирует этот код, они звонят
/ API / свинца / 1.0 / 12345 / запрос-тд
с действительным телом и все проходит
Однако, если они меняют идентификатор с int на строку,
/api/lead/1.0/invalidid/request-td
Они возвращают сообщение iis 404.
В качестве временного решения я изменил id с int на строку и удалил определение из маршрута.
Внутри контроллера выполняется TyParse, чтобы убедиться, что в URL передано действительное целое число
Однако это решение не очень элегантно для меня
Есть ли способ, чтобы я мог оставить поле id, определенное как int, с правильным типом, определенным в маршруте, перехватить недопустимый запрос API и затем отправить обратно мою собственную ошибку. т.е. другой код статуса http и тело сообщения
Если у меня есть подпись как int, но без определения переменной в маршруте,
[Route("/{id}/request-td")]
[HttpPost]
public IHttpActionResult SubmitLead(int id,
FromBody]FormData FormData)
Отправляет слишком много информации о том, почему запрос недействителен
То, что я видел до сих пор, это то, что вам нужно получить определения, созданные в правильном порядке в global.asax, а не как перехватывать недопустимые запросы API и возвращать мой собственный ответ