Веб API Дефаульт Роуте не функционирует, когда он получает параметр

Я использую Веб Api 2.0 вместе с MVC 5

Это мой WebApiConfig

  config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

Восток - мой controller:

public class PartesController : ApiController
{
    public IHttpActionResult Get(int? id)
    {
        try
        {
            using (HornosContext db = new HornosContext())
            {
                if (id == null || id == 0)
                {
                    return Ok(db.Partes.ToList());
                }
                else
                {
                    return Ok(db.HornosPartes.Where(ph => ph.IdHorno == id).Select(ph => ph.Parte).ToList());
                }
            }
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }
    }
}
  • Позвонив http://blabla/api/partes/1 Функционируй
  • Позвонив http://blabla/api/partes он дает мне 404 NOT FOUND

Если я снимаю параметр действия:

public IHttpActionResult Get()
    {
        try
        {
            using (HornosContext db = new HornosContext())
            {
                return Ok(db.Partes.ToList());
            }
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }
    }

и я посылаю называть такой метод: http://blabla/api/partes Функционируй.

Из-за какого Веба API меня не идентифицирует id как опциональная стоимость?

EDIT:

Что я могу добавлять признаки и больше действий, но будучи чем-то таким простым, я хотел бы, чтобы это функционировало с предопределенными маршрутами.

В предложенном вопросе, поскольку удвоенная проблема имеет общее с ордером на обыск конфигураций ruteo, здесь я это решил определяя стоимость, предопределенную в параметр действия (видеть ответ внизу)

1
задан 04.04.2016, 17:00
2 ответа

Только я был должен определять стоимость, предопределенную в параметр метода и оно функционировало

 public IHttpActionResult Get(int? id = null)
 {
  .....
3
ответ дан 24.11.2019, 14:38

Если ты используешь Web Api 2, используй признаки для mapear используя [Route] этой формы ты мог бы создавать два action получая или нет id

Аттрибуте Роутинг in ASP.NET Веб API 2

public class PartesController : ApiController
{
    [Route("api/partes/{id:int}")]
    [HttpGet]
    public IHttpActionResult Get(int id)
    {
        try
        {
            using (HornosContext db = new HornosContext())
            {
                return Ok(db.HornosPartes.Where(ph => ph.IdHorno == id).Select(ph => ph.Parte).ToList());
            }
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }
    }

    [Route("api/partes")]
    [HttpGet]
    public IHttpActionResult GetAll()
    {
        try
        {
            using (HornosContext db = new HornosContext())
            {
                return Ok(db.Partes.ToList());
            }
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }
    }
}
3
ответ дан 24.11.2019, 14:38
  • 1
    Спасибо, но это то, что я хочу предотвратить, я помню, что это могло делаться, не будучи должен использовать признаки ни добавляя больше методов – The One 04.04.2016, 16:27
  • 2
    но если ты это реализуешь, таким образом, оно ты функционирует? по крайней мере для того, чтобы осталось ясным, что это тема с routing – Leandro Tuttini 04.04.2016, 16:39
  • 3
    У меня есть другие методы GET и POST с параметрами и attribute routing, что, если они функционируют – The One 04.04.2016, 16:40
  • 4
    Создай проект webapi ново и проанализируй, как ты defien методы Get (), ты увидишь, что форма, в которой ты это реализуешь, не правильная, у тебя должны бы быть два метод один с параметром и другим без этого. У них может быть nismo назовите и признаки опциональные, но не верь в единственный метод с опциональным параметром. – Leandro Tuttini 04.04.2016, 16:44
  • 5
    Уже напечатайте ответ, спасибо за помощь +1 – The One 04.04.2016, 16:46

Теги

Похожие вопросы