如何为以下 api 文本设置可配置的内容。因此,用户可以将其更改为appsettings.json文件中的任何名称。或者,我可以设置默认文本以放置在链接中,以便任何链接都包含该文本。
[Route(“ api / [controller]”)]
var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();
// [Route("config["ApiName"]/[controller]")]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
return "value";
}
}
答案 0 :(得分:1)
ASP.NET Core 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
。由于该类尚未实例化,因此无法调用实例方法。
我还没有测试过它的运行方式,但这应该可以帮助您入门。
作为旁注,您可能应该调查这是否会打开任何安全漏洞。
主题之外,也许有一种更好的方法可以通过Dependency Injection来检索配置,但是我已经使用了您提供的代码。