Пакет страницы справки веб-API ASP.NET не получает все конечные точки API

Я установил пакет страницы справки веб-API ASP.NET 4 через nuget в свой проект веб-API. По какой-то причине он не отображает все конечные точки API. У меня есть документация для использования XML. Не уверен, почему это происходит, любая помощь приветствуется.

Вот пример контроллера

    public class ProductController : BaseController
    {
        // GET api/Product/Get/5/43324
        [AcceptVerbs("GET")]
        public ApiProduct Get(int id, [FromUri]int productId)
        {
             //// logic
        }
   }

маршруты

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

Спасибо


person tmjam    schedule 28.06.2013    source источник
comment
Не могли бы вы поделиться контроллерами, для которых они не отображаются?   -  person Kiran Challa    schedule 28.06.2013
comment
обновил вопрос, чтобы показать контроллер, также отображаются не все конечные точки для контроллера.   -  person tmjam    schedule 28.06.2013
comment
а не могли бы вы поделиться маршрутами?   -  person Kiran Challa    schedule 28.06.2013
comment
@KiranChalla: также обновлены маршруты.   -  person tmjam    schedule 28.06.2013
comment
HelpPage, который зависит от ApiExplorer, удаляет описания справки API, если видит возможность двусмысленности в разрешении действий. Глядя на ваше вышеуказанное действие и маршрут, страница справки должна была показать вам что-то вроде «api/Product/Get/{id}?productId={productId}»… из приведенной выше информации не совсем ясно, почему вы видя проблему ... это поможет поделиться дополнительной информацией ..   -  person Kiran Challa    schedule 28.06.2013
comment
Не уверен, какую дополнительную информацию я должен опубликовать. Я попытался создать простой простой контроллер, который не отображается. Я буду продолжать отладку.   -  person tmjam    schedule 28.06.2013
comment
давайте продолжим это обсуждение в чате   -  person Kiran Challa    schedule 28.06.2013


Ответы (4)


Я понял проблему, проблема здесь в том, что в веб-API нет действия, и методы напрямую сопоставляются с глаголом и аргументами. Обновление моего маршрута до этого устранило проблему, и все маршруты отображаются.

config.Routes.MapHttpRoute(
                name: "apsi-info",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
person tmjam    schedule 28.06.2013

Если приведенное выше решение не решает вашу проблему, взгляните и убедитесь, что вы не определяете ОБА атрибут AcceptVerbs и его ярлык:

public class ProductController : BaseController
{
    // GET api/Product/Get/5/43324
    [AcceptVerbs("GET")]
    [HttpGet]
    public ApiProduct Get(int id, [FromUri]int productId)
    {
         //// logic
    }

}

Удалите один из них, и он должен работать.

person Forty3    schedule 24.01.2017

Еще одна причина, по которой метод HTTP может быть недоступен либо в качестве конечной точки, либо не отображаться в автоматически созданной справке:

Функция может быть private, а не public.


Появится:

[HttpGet]
[Route("api/projects")]
public IHttpActionResult GetCount()
{
    return Ok(db.Projects.Count());
}

Не появится:

[HttpGet]
[Route("api/projects")]
private IHttpActionResult GetCount()
{
    return Ok(db.Projects.Count());
}
person Maximilian Peters    schedule 18.04.2018

Мой ответ может быть полезен для кого-то с другой постановкой проблемы, поскольку я столкнулся с подобной проблемой и потратил несколько часов впустую.

[PUT("Update/booking/{id}")]
public bool Put(id bookingId, [FromBody] BookingEntity bookingEntity)

Эта конечная точка API не будет отображаться на странице справки API. Если вы заметили, что имя параметра в маршруте отличается от {id}, а параметры метода — «bookingId». Оба должны быть такими же, как указано в приведенном ниже коде.

[PUT("Update/booking/{id}")]
public bool Put(id id, [FromBody] BookingEntity bookingEntity)
person Manoj Patil    schedule 28.10.2018