Ядро ASP.NET RouteAttribute
само по себе мало что делает.Вы можете попробовать унаследовать его и прочитать вашу конфигурацию внутри.В .NET Core более 1 RouteAttribute
классов, поэтому убедитесь, что вы наследуете тот же, который вы использовали в своем примере.
Это будет выглядеть примерно так:
public class MyDynamicRouteAttribute : RouteAttribute
{
public MyDynamicRouteAttribute(string template) : super(FillTemplate(template)) {}
private static string FillTemplate(string template)
{
var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();
return template.Replace(<do what you need to do>);
}
}
Тогда вы будете использовать его так, как вы описали:
[MyDynamicRoute("{ApiName}/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
...
}
Обратите внимание, что FillTemplate()
объявлен static
.Поскольку класс еще не был создан, вы не можете вызвать метод экземпляра.
Я не проверял, как он работает, но это должно помочь вам начать работу.
В качестве примечания, вам, вероятно, следует выяснить, не открывают ли это какие-либо дыры в безопасности.
Не по теме, возможно, есть лучший способ получить конфигурацию через Внедрение зависимостей , но я 'мы использовали предоставленный вами код.