.Net Core 获取应用物理路径的常见问题
如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径。
但是在Asp.Net Core中不存在Server.MapPath()方法,Controller基类也没有Server属性。
在Asp.Net Core中取得物理路径:
从ASP.NET Core 2.0开始,可以通过注入 IHostingEnvironment 服务对象来取得Web根目录和内容根目录的物理路径,IHostingEnvironment保留了应用程序的基本信息,如下所示
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.AspNetCore.Mvc;
- namespace ConsoleApp1
- {
- public class HomeController : Controller
- {
- private readonly IHostingEnvironment _hostingEnvironment;
- public HomeController(IHostingEnvironment hostingEnvironment)
- {
- _hostingEnvironment = hostingEnvironment;
- }
- public ActionResult Index()
- {
//Web根目录- string webRootPath = _hostingEnvironment.WebRootPath;
//内容根目录- string contentRootPath = _hostingEnvironment.ContentRootPath;
- return Content(webRootPath + "\n" + contentRootPath);
- }
- }
- }
这里要注意区分Web根目录 和 内容根目录的区别:
Web根目录是指提供静态内容的根目录,即asp.net core应用程序根目录下的wwwroot目录
内容根目录是指应用程序的根目录,即asp.net core应用的应用程序根目录
在ASP.NET Core 2.0之前 (就是ASP.NET Core 1.0),通过 IApplicationEnvironment.ApplicationBasePath 来获取 Asp.Net Core应用程序的根目录(物理路径) 。但是现在3都出来了,并且之前版本不完善,很多api都没有,也就不推荐使用了。
当然也有其他方式获取路径:
System.IO
命名空间System.IO
中存在Directory类,提供了获取应用程序运行当前目录的静态方法 System.IO.Directory.GetCurrentDirectory()
=>Gets the current working directory of the application,
- var path = System.IO.Directory.GetCurrentDirectory();
- Console.WriteLine(path);
输出 C:\Users\LIKUI\source\repos\ConsoleApp1\ConsoleApp1\bin\Debug\netcoreapp2.2
2. 反射方法: 获取当前执行dll所在目录
- var doPath = Assembly.GetEntryAssembly().Location;
- Console.WriteLine(doPath);
3. 反射方法: 动态方式获取当前可执行类文件所在目录
- dynamic type = (new Program()).GetType();
- string currentDirectory = Path.GetDirectoryName(type.Assembly.Location);
string webRootPath = _hostingEnvironment.WebRootPath;//为null
,wwwroot
目录,且没有启用静态文件服务需要开启服务。在
Startup.cs
的Configure
中添加app.UseStaticFiles();
,并且在应用根目录中添加文件夹命名为wwwroot
即可启动程序Startup类:
- public void Configure(IApplicationBuilder app, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- else
- {
- // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
- app.UseHsts();
- }
- app.UseStaticFiles();
- app.UseHttpsRedirection();
- app.UseMvc();
- }
5. 修改mvc/api中wwwroot静态文件夹的路径
首先在wwwroot文件下放上test.txt文件内容为测试文件。
运行后访问http://localhost:44395/test.txt
显示为测试文件。
说明默认静态文件起作用,如果不想在默认的应用程序下放wwwroot或者静态文件路径已经指向了固定位置,则需要使用StaticFileOptions
修改默认静态文件夹的路径
比如这里我引用本地桌面的一个文件
- public void Configure(IApplicationBuilder app, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- else
- {
- // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
- app.UseHsts();
- }
- //引用自定义路径静态文件
- var path = @"C:\Users\LIKUI\Desktop\试点项目\";
- var staticFile = new StaticFileOptions();
- staticFile.FileProvider = new PhysicalFileProvider(path);
- app.UseStaticFiles(staticFile);
- app.UseHttpsRedirection();
- app.UseMvc();
- }
如图:
public void ConfigureServices(IServiceCollection services)
{
services.AddDirectoryBrowser();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
- public void Configure(IApplicationBuilder app, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- else
- {
- // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
- app.UseHsts();
- }
- //引用自定义文件路径
- var path = @"C:\Users\LIKUI\Desktop\试点项目\";
- var staticFile = new StaticFileOptions();
- staticFile.FileProvider = new PhysicalFileProvider(path);
- app.UseStaticFiles(staticFile);
- //显示静态文件路径下的所有文件
- var staticBrowser = new DirectoryBrowserOptions();
- staticBrowser.FileProvider = new PhysicalFileProvider(path);
- app.UseDirectoryBrowser(staticBrowser);
- app.UseHttpsRedirection();
- app.UseMvc();
- }
如图:
.log
,.conf
等为文本文件格式
- public void Configure(IApplicationBuilder app, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- else
- {
- // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
- app.UseHsts();
- }
- //引用自定义文件路径
- var path = @"C:\Users\LIKUI\Desktop\试点项目\";
- var staticFile = new StaticFileOptions();
- staticFile.FileProvider = new PhysicalFileProvider(path);
- staticFile.ServeUnknownFileTypes = true;
- staticFile.DefaultContentType = "application/x-msdownload";//设置默认MIME,此处为下载
- var fileExtensionContentTypeProvider = new FileExtensionContentTypeProvider();
- fileExtensionContentTypeProvider.Mappings.Add(".log", "text/plain");//设置特定类型的MIME
- fileExtensionContentTypeProvider.Mappings.Add(".conf", "text/plain");
- staticFile.ContentTypeProvider = fileExtensionContentTypeProvider;
- app.UseStaticFiles(staticFile);
- //显示静态文件路径下的所有文件
- var staticBrowser = new DirectoryBrowserOptions();
- staticBrowser.FileProvider = new PhysicalFileProvider(path);
- app.UseDirectoryBrowser(staticBrowser);
- app.UseHttpsRedirection();
- app.UseMvc();
- }
这样就可以打开了
.Net Core 获取应用物理路径的常见问题的更多相关文章
- Windows 批处理获取某路径下最新创建的文件的名称
批处理获取某路径下最新创建的文件的名称 by:授客 QQ:1033553122 echo off setlocal enabledelayedexpansion rem 设置文件所在目录 set sr ...
- .NET Core 中的路径问题
NET Core 应用程序相对于以前的.NET Framework 应用程序在启动运行的方式上有一定的差异,今天就来谈一谈这个获取应用程序启动路径的问题. 1.工作路径 WorkingDirector ...
- Asp.Net Core获取请求信息/获取请求地址
一.Asp.Net Core 2.0版本中目前HttpRequest是个抽象类 在控制器或视图上下文中获取到的 Request对象,是 DefaultHttpRequest的实例. 定义 如图 : ...
- Asp.Net Core Web相对路径、绝对路径整理
一.相对路径 1.关于Asp.Net Core中的相对路径主要包括两个部分:一.Web根目录,即当前网站的目录为基础:二.内容目录wwwroot文件夹,对于静态文件都放在这个目录. 2.获取控制器,A ...
- katalon系列十四:执行Windows命令&获取项目路径
Katalon Studio中也可以运行Windows命令执行一些系统操作. 根据官方文档,在test case中输入命令:cmd = 'del E:\\shot\\*.xlsx E:\\shot\\ ...
- java获取项目路径,url路径
我的web项目名iamgeModel. 工作空间在D盘 先获取url相关: 需要是HttpServletRequest request; 获取IP: request.getServerName() / ...
- C# 获取文件路径
1.C# 获取文件路径:http://www.cnblogs.com/bq-blog/archive/2012/09/01/2666394.html
- JAVA获取服务器路径的方法
1.在JSF环境中获取到ServletContext: 1 2 ServletContext sc = (ServletContext)FacesContext. getCurrent ...
- java代码中获取classpath路径
Javaweb工程中,有时候需要自己手动的去读取classpath下面的配置文件,这里总结一点读取classpath路径的方法,分享一下. 方法一: String path = Test.class. ...
随机推荐
- MySQL查询优化一例——也说说 Using intersect
生产上面有一条sql查询很慢,需要7到8秒左右,简化之后的sql如下所示: SELECT mingxi.* FROM ( SELECT btjc01.id, department.`name` AS ...
- Flink流式计算
Structured Streaming A stream is converted into a dynamic table. A continuous query is evaluated on ...
- Ubuntu18.04安装cudnn7.6.1
注:如果使用anaconda,貌似不需要安装cuda和cudnn,安装tensorflow时会自动安装 1.进入nvidia官网https://developer.nvidia.com/cudnn下载 ...
- javascript打开窗口
项目中javascript代码,早期使用了只有ie支持的方法:Window createPopup() 方法 那个时候是2009年,而现在已经是2019-12-11了.如何改造这个早期的代码呢? 找到 ...
- Python并发编程内容回顾
Python并发编程内容回顾 并发编程小结 目录 • 一.到底什么是线程?什么是进程? • 二.Python多线程情况下: • 三.Python多进程的情况下: • 四.为什么有这把GIL锁? • 五 ...
- hbase运行原理
HBase特点 1)海量存储 Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据.这与Hbase的极易扩展性息息相关.正式因为Hbase良好 ...
- yarn rest api未授权漏洞
项目集群之前在yarn8088的web资源管理页面上看到一堆莫名的定时任务,就是黑客利用漏洞挖矿,最后禁用了8088端口. freebuff传送门: https://www.freebuf.com/v ...
- chrome-解决该扩展程序未列在 Chrome 网上应用店中
1.win10添加策略组 复制以下内容到.bat文件中,右键-以管理员身份运行,即可添加策略组 pushd "%~dp0" dir /b C:\Windows\servicing\ ...
- B 题解————2019.10.16
相信他说的话,但不要当真 [题目描述]有一个长度为 n 的自然数序列 a,要求将这个序列恰好分成至少 m 个连续子段. 每个子段的价值为该子段的所有数的按位异或.要使所有子段的价值按位与的结果最大,输 ...
- 【可持久化0/1Trie】【P4735】最大异或和
Description 给定一个长度为 \(n\) 的序列 \(A\),有 \(m\) 次操作,每次要么在序列尾部再添加一个数,将序列长度 \(n\) 加一,要么给进行一次查询,给定查询参数 \(l, ...