ASP.NET核心:Server.MapPath的替换
博客文章展示了如何在ASP.NET Core中组织应用程序和公共Web文件以及如何从Web应用程序访问它们。ASP.NET Core为文件提供了两个不同的位置:内容根 - 这是应用程序二进制文件和其他私有文件的保存位置。但是也存在Web根位于其他位置的部署。我以前在Azure Web Apps上看到过这样的部署。某些ISP也可能在树中使用不同的目录来存储应用程序文件和Web根目录。此外,我们需要一
博客文章展示了如何在ASP.NET Core中组织应用程序和公共Web文件以及如何从Web应用程序访问它们。ASP.NET Core为文件提供了两个不同的位置:内容根 - 这是应用程序二进制文件和其他私有文件的保存位置。但是也存在Web根位于其他位置的部署。我以前在Azure Web Apps上看到过这样的部署。某些ISP也可能在树中使用不同的目录来存储应用程序文件和Web根目录。此外,我们需要一些代码包含在文件中 - 至少对于Kestrel而言。我的hosting.json在这里显示。{"webRoot": "c:\\temp\\wwwroot\\"}它在程序启动时加载。我使这个文件可选,所以当托管文件丢失时我的应用程序不会崩溃。public class Program{public static void Main{var config = new ConfigurationBuilder().AddJsonFile.Build();CreateWebHostBuilder.UseConfiguration.UseKestrel().Build().Run();}public static IWebHostBuilder CreateWebHostBuilder =>WebHost.CreateDefaultBuilder.UseStartup 博客文章展示了如何在ASP.NET Core中组织应用程序和公共Web文件以及如何从Web应用程序访问它们。 ASP.NET Core为文件提供了两个不同的位置: 默认情况下,Web根位于内容根目录下。但是也存在Web根位于其他位置的部署。我以前在Azure Web Apps上看到过这样的部署。某些ISP也可能在树中使用不同的目录来存储应用程序文件和Web根目录。 在代码中获取内容和Web根目录 内容根和Web根目录的路径可通过代码中的IHostingEnvironment获得,如此处所示。 请注意内容根和wwwroot如何位于机器中完全不同的位置。 设置Web Root的位置 要为Web根目录设置位置,我们需要在应用程序根文件夹中使用hosting.json文件。此外,我们需要一些代码包含在文件中 - 至少对于Kestrel而言。我的hosting.json在这里显示。 { "webRoot": "c:\\temp\\wwwroot\\" } 它在程序启动时加载(Program.cs文件)。我使这个文件可选,所以当托管文件丢失时我的应用程序不会崩溃。 public class Program { public static void Main(string[] args) { var config = new ConfigurationBuilder() .AddJsonFile("hosting.json", optional: true) .Build(); CreateWebHostBuilder(args).UseConfiguration(config) .UseKestrel() .Build() .Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); } 如果没有托管文件,则使用默认配置,ASP.NET Core期望Web根位于应用程序的内容根目录下。 总结 虽然我们Server.MapPath()在ASP.NET中没有 调用,但我们有IHostingEnvironment,它为我们提供了应用程序内容根和Web根目录的路径。这些是提到的位置的完整路径,而不是URL。如果需要,我们可以使用这些路径从两个位置读取文件。