在我的模型类中,我尝试根据环境(开发,生产)从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"
}
我该如何实现?预先感谢
答案 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如下: