如何在C# ASP.NET Core 8 MVC应用中读取IIS物理路径下的文件?
解决方法
方法一:直接指定目标文件路径
既然明确知道Navbar.json的位置是C:\Staging\appsdev\Navbar.json,可以直接跳过遍历逻辑,读取该路径的文件:
public class NavigationViewComponent: ViewComponent { public async Task<IViewComponentResult> InvokeAsync() { // 直接指定目标文件路径 string navbarFilePath = @"C:\Staging\appsdev\Navbar.json"; if (!File.Exists(navbarFilePath)) { // 文件不存在时返回空菜单,可根据需求调整逻辑 return View("_ILIMSNavigation", new List<MenuItem>()); } var jsonRawData = await File.ReadAllTextAsync(navbarFilePath); List<MenuItem> menuItems = JsonConvert.DeserializeObject<List<MenuItem>>(jsonRawData)!; return View("_ILIMSNavigation", menuItems); } }
方法二:通过配置文件读取路径(推荐)
硬编码路径不利于后续维护,建议将路径配置到appsettings.json中:
- 在
appsettings.json添加配置项:
{ "NavigationSettings": { "NavbarJsonPath": "C:\\Staging\\appsdev\\Navbar.json" } }
- 修改ViewComponent,注入
IConfiguration读取配置:
public class NavigationViewComponent: ViewComponent { private readonly IConfiguration _configuration; public NavigationViewComponent(IConfiguration configuration) { _configuration = configuration; } public async Task<IViewComponentResult> InvokeAsync() { string navbarFilePath = _configuration.GetValue<string>("NavigationSettings:NavbarJsonPath"); if (string.IsNullOrEmpty(navbarFilePath) || !File.Exists(navbarFilePath)) { return View("_ILIMSNavigation", new List<MenuItem>()); } var jsonRawData = await File.ReadAllTextAsync(navbarFilePath); List<MenuItem> menuItems = JsonConvert.DeserializeObject<List<MenuItem>>(jsonRawData)!; return View("_ILIMSNavigation", menuItems); } }
关键注意事项
- 权限配置:确保IIS应用池的运行身份对
C:\Staging\appsdev目录有读取权限,否则会出现文件访问拒绝错误。 - 路径格式:Windows路径需用双反斜杠
\\或逐字字符串@"路径",避免转义问题。
内容的提问来源于stack exchange,提问作者wenreloz
相关产品推荐
相关产品推荐

