Список маршрутов Api конкретного контроллера C # - PullRequest
0 голосов
/ 30 августа 2018

У меня есть контроллер aController

Я бы хотел, чтобы одна из конечных точек возвращала массив всех маршрутов, на которые указывает другая конечная точка.

Например, если у меня есть 3 конечные точки:

public class AController : Controller {

    [HttpGet("BRoute")]
    public string B(){ return "1"}

    [HttpGet("CRoute")]
    public string C(){ return "2"}

    [HttpGet("DRoute")]
    public string D(){ return "3"}

    [HttpGet("GetAllRoutes")]
    public string GetAllRoutes(){ 
        var allRoutes = typeof(AController).GetRoutes() //Does not exist
        return allRoutes //Return ["BRoute", "CRoute", "DRoute", "GetAllRoutes"]
    }
}

Есть ли что-то подобное, похожее на getMethods?

Или более простой вопрос. С названием метода, есть ли способ для меня, чтобы получить маршрут?

1 Ответ

0 голосов
/ 03 сентября 2018

Вы можете найти все действия (вместе с их данными о маршрутах и ​​атрибутами маршрутов), внедрив службу IActionDescriptorCollectionProvider. См. Здесь .

В asp.net core2.1 Web API попробуйте следующие коды:

public class ValuesController : Controller
{
    private readonly IActionDescriptorCollectionProvider _provider;

    public ValuesController(IActionDescriptorCollectionProvider provider)
    {
        _provider = provider;
    }

    [HttpGet("BRoute")]
    public string B() { return "1"; }

    [HttpGet("CRoute")]
    public string C() { return "2"; }

    [HttpGet("DRoute")]
    public string D() { return "3"; }

    [HttpGet("GetAllRoutes")]
    public IActionResult GetRoutes()
    {          
        ArrayList allRoutes = new ArrayList();
        foreach (var item in _provider.ActionDescriptors.Items)
        {
            var Template = item.AttributeRouteInfo.Template;
            Template = Template.Substring(Template.LastIndexOf("/") + 1);
            allRoutes.Add(Template);
        }

        return Ok(allRoutes);//Return ["BRoute", "CRoute", "DRoute", "GetAllRoutes"]
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...