我有一个 .net core 3.1 版本的 ASP.NET core REST API 服务。我想在 appsettings.json 或其他配置文件中为 API 的 URL 的特定部分创建一个公共变量。例如,如果我的 URLhttp://localhost:31660/Inventory/v1.0/{Id}/data
在这里是这样的,那么/Inventory/v1.0
到达此控制器方法的每个请求都是通用的。目前,它在控制器中设置。有没有办法将该部分放入配置文件一次,并在需要设置时获取该变量?
问问题
758 次
1 回答
1
根据您的描述,我建议您可以考虑使用自定义路由属性来满足您的要求。
您可以创建一个静态类来读取 appsettings,然后将{Id}/data
as 参数传递给自定义路由属性类来满足您的要求。
更多细节,您可以参考以下代码:
appsettings.Development.json:
"apitemplate": "Inventory/v1.0/"
MyApiControllerAttribute 类:
public static class AppSettingsConfig
{
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
.Build();
}
public class MyApiControllerAttribute : Attribute, IRouteTemplateProvider
{
public MyApiControllerAttribute(string _route) {
var re = AppSettingsConfig.Configuration.GetValue<string>("apitemplate");
route = re +_route ;
//route = re ;
}
public string route { get; set; }
public string Template => route;
public int? Order => 0;
public string Name { get; set; }
}
用法:
[MyApiController("{Id}/data")]
public FileResult StreamVid(string Id)
{
return OK();
}
结果:
于 2020-10-19T08:24:24.583 回答