我正在尝试创建一个restful服务来公开一些数据,一切都很顺利,直到我意识到从服务器暴露图像的完整URL是一件痛苦的事情。也许只有我觉得很复杂。
为了更好地理解背景,我正在使用Entity Framework从我的数据库中读取数据,这是我正在处理的表:
正如你所看到的,有一个名为“ImagePath”的字段,命名不好,应该是“ImageName”,但那列保存了代表Champion对象的图片的确切文件名,所有图片当前位于wwwroot项目文件夹内,就像这样:
所有业务逻辑都不在控制器中,而是在一个常规类的Service文件夹/层中(也许这不是相关的,但我只想澄清我没有在任何控制器中工作):
这是我期望魔术发生的方法:
public async Task<IList<Champion>> GetChampions()
{
List<Champion> champions = await _context.Champion
.Include(x => x.PrimaryClass)
.Include(x => x.SecondaryClass)
.Include(x => x.ChampionUserRate)
.ToListAsync();
//BEFORE RETURNING THE CHAMPION TO THE CONTROLLER, I WILL NEED TO CONCATENATE MY CURRENT SERVER URL AND THE PATH TO THE IMAGE PLUS THE IMAGE NAME FILE WHICH IS ALREADY IN THE DATABASE AND ALREADY MATCHES THE IMAGES FOLDER
string serverPathToChampionsFolder = null; //Example: http://localhost:57435/wwwroot/Champions
foreach (var champion in champions)
{
champion.ImagePath = serverPathToChampionsFolder + champion.ImagePath;
}
return champions;
}
在这里需要明确的是,关键行是:
string serverPathToChampionsFolder = null; //Example: http://localhost:57435/wwwroot/Champions
我需要以类似于示例的方式获取当前URL,以便将其添加到每个冠军上,以便客户端可以在图像标记中使用它。
如果无法通过我尝试实现的方法来实现它,那么我将接受任何其他建议,重点是公开图像URL,不管怎样都可以。
Url.Content($"~/Champions/{filename}");
使其正常工作。 - RMH