如何将路径与WebRootPath结合

时间:2019-05-24 20:44:58

标签: c# asp.net-core

我需要使用我的应用程序将一些文件上传到服务器,并且需要提供要保存文件的文件夹的完整路径。 我正在使用dbConnect(odbc(), .connection_string = "Driver={Simba Athena ODBC Driver};", driver = "/Library/simba/athenaodbc/lib/libathenaodbc_sbu.dylib", Schema = "...", AwsRegion = "...", AuthenticationType = "IAM Credentials", UID = "...", PWD = "...", sessiontoken = "...", S3OutputLocation = "...") 方法和来自appsettings.json的Path.Combine其他文件夹路径和文件名。 代码如下:

webHostEnvironment.WebRootPath

问题是var pathString = configuration.GetValue<string>("UploadPaths:Pictures"); var path = Path.Combine(webHostEnvironment.WebRootPath, pathString, picture.Name); 变量中webHostEnvironment.WebRootPath被忽略了(路径看起来像pathString + picture.Name)。

有人知道如何获得正确的路径吗?

3 个答案:

答案 0 :(得分:0)

您应该为Path.Combine签出full documentation。可能会发生一些奇怪的事情。根据您的描述,似乎pathString来自您的配置文件,其中包含一个根(即,它不是相对路径)。

var path = Path.Combine("path1", "c:\path2", "path3");
// path is c:\path2\path3, since an argument with a root overrides any previous argument

答案 1 :(得分:0)

在ASP.NET Core中,可以通过注入和查询val rdd4: RDD[Row] = rdd1.mapPartitions((it:Iterator[String]) => { def createrow(a: List[String]): Row = { val format = new java.text.SimpleDateFormat("dd/MMM/yyyy HH:mm:ss Z") val re1: Row = Row.apply(a.head) val d: Date = format.parse(a.tail.mkString(" ")) val t = new Timestamp(d.getTime) val re2: Row = Row.apply(t) Row.merge(re1, re2) } var output: List[Row] = List() while (it.hasNext) { val data: String = it.next() val res = data match { case rx(ipadd, date, time) => createrow(List(ipadd, date, time)) case _ => createrow(List("0.0.0.0", "00/Jan/0000", "00:00:00 0")) } output = output :+ res } output.toIterator }).persist(MEMORY_ONLY) // Collect and Persist the RDD in Memory val tmp = rdd4.collect() 服务来检索到Web根目录和内容根目录的物理路径:

IHostingEnvironment

您可以看看Getting the Web Root Path and the Content Root Path in ASP.NET Core

答案 2 :(得分:0)

如果您使用的是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时,某些类型   如IHostingEnvironment和IApplicationLifetime是从   Microsoft.AspNetCore.Hosting。某些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中删除。