【问题标题】:How to assign base path of API URL in config file?如何在配置文件中分配 API URL 的基本路径?
【发布时间】:2021-02-01 22:18:03
【问题描述】:
我有一个 .net core 3.1 版本的 ASP.NET core REST API 服务。我想在 appsettings.json 或其他配置文件中为 API 的 URL 的特定部分创建一个公共变量。例如,如果我的 URL 是这样的http://localhost:31660/Inventory/v1.0/{Id}/data,那么/Inventory/v1.0 将适用于到达此控制器方法的每个请求。目前,它在控制器中设置。有没有办法将该部分放入配置文件一次,并在需要设置时获取该变量?
【问题讨论】:
标签:
asp.net-core
url-routing
rest
config-files
base-path
【解决方案1】:
根据您的描述,我建议您可以考虑使用自定义路由属性来实现您的要求。
您可以创建一个静态类来读取 appsettings,然后将 {Id}/data 作为参数传递给自定义路由属性类来实现您的要求。
更多细节,您可以参考以下代码:
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();
}
结果: