.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. ...
随机推荐
- Centos7配置ssh免密登录群发
ssh免密登录是客户端发送自己的公钥到服务器.用公钥进行解密,自己生成的私钥进行加密. 首先在客户端查看sshd服务是否启动 [zhiwei@zhiwei1 ~]$ ps -Af|grep sshd; ...
- OpenLDAP 常用命令
OpenLDAP 常用命令 本文原始地址:https://sitoi.cn/posts/5308.html ldapsearch ldapsearch - ldap 搜索工具 ldapsearch 实 ...
- 解决大于5.7版本mysql的分组报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.
前言: 借鉴网址:https://blog.csdn.net/fansili/article/details/78664267 原因: MySQL 5.7.5和up实现了对功能依赖的检测.如果启用了 ...
- python之线程和进程(并发编程)
python的GIL In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native ...
- 第03节-BLE协议各层数据格式概述
本篇博客根据韦大仙的视频,整理所得. 对于BLE系统,它分为上下两块.上面那一块,我们称为host主机.下面这一块是controller,你可以简单的认为它就是一个蓝牙芯片. 对于host这一块,它运 ...
- rtmpdump应用在window中
rtmp.c 中RTMP_GetTime()函数要改成如下: #pragma comment(lib, "winmm.lib ")uint32_tRTMP_GetTime(){// ...
- springmvc controller层接收List类型的参数
Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是applica ...
- 常用dos命令(2)
文件管理 type 显示文本文件的内容. copy 将一份或多份文件复制到另一个位置. del 删除一个或数个文件. move 移动文件并重命名文件和目录.(Windows XP Home Editi ...
- java 读写Parquet格式的数据 Parquet example
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOExce ...
- 浅谈HTTPS传输过程
HTTPS是什么 HTTPS不是一个新的协议,可以理解为是一个HTTP协议的加密"版本"(HTTP+SSL(TLS)).那为什么HTTP协议需要加密,不加密会出现什么问题呢?先来了 ...