0

我有一个 .net core 3.1 版本的 ASP.NET core REST API 服务。我想在 appsettings.json 或其他配置文件中为 API 的 URL 的特定部分创建一个公共变量。例如,如果我的 URLhttp://localhost:31660/Inventory/v1.0/{Id}/data在这里是这样的,那么/Inventory/v1.0到达此控制器方法的每个请求都是通用的。目前,它在控制器中设置。有没有办法将该部分放入配置文件一次,并在需要设置时获取该变量?

4

1 回答 1

1

根据您的描述,我建议您可以考虑使用自定义路由属性来满足您的要求。

您可以创建一个静态类来读取 appsettings,然后将{Id}/dataas 参数传递给自定义路由属性类来满足您的要求。

更多细节,您可以参考以下代码:

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 回答