Параметры маршрута не работают в WebApi
Ниже находится WebAPI.
[RoutePrefix("api/customer")]
public class CustomerController : ApiController
{
[Route("{id:int:min(1)}/")]
public HttpResponseMessage Get(int id)
{
//my stuff
}
}
Если я передам любое значение меньше 1 (скажем, 0 или -1). Возвращает тело ответа как NUll с HttpStatusCode = 200
Ожидаемый ответ: HttpStatus Code = 404.
Однако, если я изменю свой маршрут, как показано ниже.
[RoutePrefix("api/customer")]
public class CustomerController : ApiController
{
[Route("detail/{id:int:min(1)}/")]
public HttpResponseMessage Get(int id)
{
//my stuff
}
}
Теперь, если я передам значение меньше 1, я получу ожидаемый ответ, т.е. 404.
http://localhost:8080/api/customer/detail/-1 returns - 404.(Desired response).
http://localhost:8080/api/customer/-1 returns - Null.(Not correct).
Что является причиной этого и как я могу это исправить?
Любая помощь / предложение высоко ценится.
1 ответ
Вы должны удалить
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
из вашей маршрутизации WebApi.Config. Происходит следующее: маршрут /api/ Customers/-1 не соответствует атрибуту route, поскольку он не соответствует ограничению. Это, однако, не останавливает его от поиска других подходящих маршрутов.
Если бы вы использовали только атрибутную маршрутизацию, вы бы получили 404, однако после сбоя этого маршрута платформа продолжит поиск жизнеспособного маршрута, который он найдет в вашем маршруте "DefaultApi". Таким образом, он использует клиентов для {controller} и -1 для {id} и передает это в ваш метод Get.