来自.net核心模型中的appsettings.json的值

时间:2018-08-02 01:22:39

标签: asp.net-core .net-core

在我的模型类中,我尝试根据环境(开发,生产)从appsettings.json中读取一个值并设置图像的CDN url。这是一个.net核心应用。

模型

public class Person
{
   public int Id  { get; set; }

   public int ProfileImageUrl => $"{Configuration["CdnUrl"]}/profiles/{Id}.jpg"
}

Index.cshtml(剃刀页面)

@page
@model IndexModel

<img src="@Model.ProfileImageUrl " />

Index.cshtml.cs

public async Task OnGetAsync()
{
    Person = await _context.Person.FirstAsync();
}

应用设置

appsettings.Development.json
{
   "CdnUrl": "/images"
}

appsettings.Production.json
{
   "CdnUrl": "https://images.domain.com"
}

我该如何实现?预先感谢

1 个答案:

答案 0 :(得分:0)

有一个简单的方法可以做到这一点。由于您已在 appsettings.json 文件中配置了 CdnUrl ,因此,我们将创建一个具有 IConfiguration 属性的 TagHelper 注入,以便我们可以在运行时计算最终URL:

[HtmlTargetElement("cdn-img")]
public class CdnImgTagHelper : TagHelper
{
    public IConfiguration Configuration{ get; set; } 
    public CdnImgTagHelper(IConfiguration configuration) {
        this.Configuration = configuration;
    }
    public string Src { get; set; }
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "img";

        var CdnUrlBase = Configuration["CdnUrl"];
        // make sure CndUrlBase endwith "/"
        if (String.IsNullOrEmpty(CdnUrlBase)) { CdnUrlBase ="/"; }
        if (!CdnUrlBase.EndsWith("/")) { CdnUrlBase = CdnUrlBase + "/"; }

        // make sure src don't start with "/"
        if (Src.StartsWith("/")) { Src= Src.Substring(0, Src.Length - 1); }

        output.Attributes.SetAttribute("src", CdnUrlBase + Src);
    }
}

CdnImgTagHelper 导入您的 _ViewsImports 文件后,我们可以像这样使用它:

<cdn-img src="mfcpv.png"></cdn-img>

由于我已经用

配置了 appsettings.json
"CdnUrl": "https://i.stack.imgur.com"

生成的img如下:

cdn tag helper demo