繁体   English   中英

如何将路径与WebRootPath结合

[英]How to combine path with WebRootPath

我需要使用我的应用程序将一些文件上传到服务器,并且需要提供要保存文件的文件夹的完整路径。 我正在将Path.Combine和文件名中的Path.Combine方法与webHostEnvironment.WebRootPath其他文件夹路径一起使用。 代码如下:

var pathString = configuration.GetValue<string>("UploadPaths:Pictures");
var path = Path.Combine(webHostEnvironment.WebRootPath, pathString, picture.Name);

问题是, webHostEnvironment.WebRootPath只是在path变量中被忽略了(path看起来像pathString + picture.Name)。

任何想法如何获得正确的道路?

您应该查看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

在ASP.NET Core中,可以通过注入和查询IHostingEnvironment服务来检索到Web根目录和内容根目录的物理路径:

 public class HomeController : Controller
{
    private readonly IHostingEnvironment _hostingEnvironment;

    public HomeController(IHostingEnvironment hostingEnvironment)
    {
        _hostingEnvironment = hostingEnvironment;
    }

    public ActionResult Post(Picture picture)
    {
        var pathString = configuration.GetValue<string>("UploadPaths:Pictures");
        var path = Path.Combine(_hostingEnvironment.WebRootPath, pathString, picture.Name);
        return Content(path);
    }
}

您可以看看在ASP.NET Core获取Web根路径和内容根路径

如果您使用的是Asp.net core 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);
    }
}

在2.1中引入Microsoft.Extensions.Hosting时,从Microsoft.AspNetCore.Hosting复制了一些类型,如IHostingEnvironment和IApplicationLifetime。 某些3.0更改导致应用程序同时包含Microsoft.Extensions.Hosting和Microsoft.AspNetCore.Hosting命名空间。 当引用两个名称空间时,对这些重复类型的任何使用都会导致“模糊引用”编译器错误。

通过将以下类型标记为过时并将其替换为新类型,可以解决此错误(在3.0.0-preview3中)。 没有对新类型进行任何行为更改,仅是命名。

 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中删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM