我需要使用我的应用程序将一些文件上传到服务器,并且需要提供要保存文件的文件夹的完整路径。我正在使用Path.Combine带有webHostEnvironment.WebRootPath来自 appsettings.json 和文件名的附加文件夹路径的方法。代码如下所示:
var pathString = configuration.GetValue<string>("UploadPaths:Pictures");
var path = Path.Combine(webHostEnvironment.WebRootPath, pathString, picture.Name);
Run Code Online (Sandbox Code Playgroud)
问题是变量中的webHostEnvironment.WebRootPath只是省略了path(路径看起来像 pathString + picture.Name)。
知道如何获得正确的路径吗?
如果您正在使用Asp.net核心3,然后用IWebHostEnvironment替代IHostingEnvironment。将 IWebHostEnvironment 作为依赖项注入依赖类。https://github.com/aspnet/AspNetCore/issues/7749
public class HomeController : Controller
{
private readonly IWebHostEnvironment _webHostEnvironment;
public HomeController(IWebHostEnvironment webHostEnvironment)
{
_webHostEnvironment= webHostEnvironment;
}
public IActionResult Index()
{
return Content(_webHostEnvironment.WebRootPath + "\n" + _webHostEnvironment.ContentRootPath);
}
}
Run Code Online (Sandbox Code Playgroud)
当 Microsoft.Extensions.Hosting 在 2.1 中引入时,一些类型如 IHostingEnvironment 和 IApplicationLifetime 是从 Microsoft.AspNetCore.Hosting 复制的。一些 3.0 更改导致应用同时包含 Microsoft.Extensions.Hosting 和 Microsoft.AspNetCore.Hosting 命名空间。当引用两个命名空间时,对这些重复类型的任何使用都会导致“模糊引用”编译器错误。
此错误已在 3.0.0-preview3 中通过将以下类型标记为过时并用新类型替换它们来解决。新类型没有任何行为变化,只有命名。
Run Code Online (Sandbox Code Playgroud)Obsolete types (warning): Microsoft.Extensions.Hosting.IHostingEnvironment Microsoft.AspNetCore.Hosting.IHostingEnvironment Microsoft.Extensions.Hosting.IApplicationLifetime Microsoft.AspNetCore.Hosting.IApplicationLifetime Microsoft.Extensions.Hosting.EnvironmentName Microsoft.AspNetCore.Hosting.EnvironmentName New types: Microsoft.Extensions.Hosting.IHostEnvironment Microsoft.AspNetCore.Hosting.IWebHostEnvironment : IHostEnvironment Microsoft.Extensions.Hosting.IHostApplicationLifetime Microsoft.Extensions.Hosting.Environments请注意,新的 IHostEnvironment IsDevelopment、IsProduction 等扩展方法位于 Microsoft.Extensions.Hosting 命名空间中,可能需要将其添加到您的应用中。
对于 3.0,新旧类型都可以从 HostBulder 和 WebHostBuilder 的依赖注入容器中获得。旧类型将在 4.0 中删除。
小智 1
您应该查看 的完整文档Path.Combine。可能会发生一些奇怪的事情。根据您所描述的内容,似乎pathString来自您的配置文件的根目录(即它不是相对路径)。
var path = Path.Combine("path1", "c:\path2", "path3");
// path is c:\path2\path3, since an argument with a root overrides any previous argument
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10307 次 |
| 最近记录: |