asp.net 5 中应用程序根目录及物理文件根目录的获取方式 此文已过期,不再适应rc1以后的版本
之前看了asp.net5,小弟就试着用了用,做了个小网站练习一下,有一个小模块需要上传图片到wwwroot下的images文件夹,但是aspnet5 发生了翻天复地变化,之前获取网站根目录的的方法不再适用。去网上翻遍了文章也没找到方法,无奈之下想到看看源码(大神不要见笑,我也看不懂,只是胡乱的看),终于让我看到一个类:
namespace Microsoft.Framework.Runtime
{
[AssemblyNeutral]
public interface IApplicationEnvironment
{
string ApplicationBasePath { get; }
string ApplicationName { get; }
string Configuration { get; }
FrameworkName RuntimeFramework { get; }
string Version { get; }
}
但是这个接口的实现类怎么去获得呢?经过几番尝试,找到了一个方法:
var approot = Context.ApplicationServices.GetService<IApplicationEnvironment>().ApplicationBasePath;
根据获取的应用程序根路径在拼接自己的字符串,就可以获取到 存放图片的文件夹的路径,喜出望外啊,但是接下来问题来了,把网站发布之后,目录结构发生了变化,运行报错了,于是想到了project.json这个文件下的第一项:
这是发布前:"webroot": "wwwroot"
这是发布后:"webroot": "../../../../../wwwroot"
这样一来不就很简单了嘛,先获取project.json这个文件,然后获取节点“webroot”,在于之前的获得到的应用程序根路径也就是approot进行拼接不就可以了,方法如下:
var config = new Configuration().AddJsonFile("project.json").AddEnvironmentVariables();
var wwwroot=config.Get<string>("webroot");
但是运行起来却报错了,没有权限获取到“project.json”,有的同学会说直接写死不久可以了吗,效果如下:
var approot = Context.ApplicationServices.GetService<IApplicationEnvironment>().ApplicationBasePath;
// var wwwroot = approot + "\\wwwroot";//发布前
var wwrrot = approot + "..\\..\\..\\..\\..\\wwwroot";//发布后
其实这样也勉强可以,就是缺少了点灵活性,比如像 吧wwwroot目录改名为www(因为买的虚拟空间网站更目录必须为www)就需要在代码中再做修改;不过当前也没更好的方法,只能这样做了。
一次偶然用aspnet 自承载测试的时候,报了一个错误:
想到了这是因为把 wwwroot文件夹改名为www,而project.config里面却没有改过来(还是wwwroot),这不就是因为找到wwwroot文件夹而报的错误,喜出望外啊,顺藤摸瓜,用反编译软件查看这两个类,终于看到如下代码:
public HostingEnvironment(IApplicationEnvironment appEnvironment, IEnumerable<IConfigureHostingEnvironment> configures)
{
this.EnvironmentName = "Development";
this.WebRoot = HostingUtilities.GetWebRoot(appEnvironment.get_ApplicationBasePath());
this.WebRootFileProvider = new PhysicalFileProvider(this.WebRoot);
using (IEnumerator<IConfigureHostingEnvironment> enumerator = configures.GetEnumerator())
{
while (enumerator.MoveNext())
{
enumerator.Current.Configure(this);
}
}
}
就是这一句 this.WebRoot = HostingUtilities.GetWebRoot(appEnvironment.get_ApplicationBasePath());困扰多日的问题终于解决了;完整的获取aspnet5网站 物理文件根目录的代码如下:
var approot = Context.ApplicationServices.GetService<IApplicationEnvironment>().ApplicationBasePath; var wwwroot = Microsoft.AspNet.Hosting.HostingUtilities.GetWebRoot(approot);
自此结束。
小弟第一次写博客,不太善于表达,望大神们不要见怪
asp.net 5 中应用程序根目录及物理文件根目录的获取方式 此文已过期,不再适应rc1以后的版本的更多相关文章
- 在ASP.NET Core中使用EPPlus导入出Excel文件
这篇文章说明了如何使用EPPlus在ASP.NET Core中导入和导出.xls/.xlsx文件(Excel).在考虑使用.NET处理excel时,我们总是寻找第三方库或组件.使用Open Offic ...
- 在Asp.Net Core中使用中间件保护非公开文件
在企业开发中,我们经常会遇到由用户上传文件的场景,比如某OA系统中,由用户填写某表单并上传身份证,由身份管理员审查,超级管理员可以查看. 就这样一个场景,用户上传的文件只能有三种人看得见(能够访问) ...
- WP8.1开发中找程序下的Assets文件夹
这俩天在开发另一个程序时,遇到一个小问题:如何调用程序下的Assets文件夹及其下的文件和文件夹: 在网上找了两天,基本上是关于如何调用手机中库的方法,没找到有关介绍如何调用查找 编译前添加图片或其它 ...
- asp.net项目中通过Web.config配置文件及文件夹的访问权限!
描述:在开发中我们通常会碰到这样的问题,例如:在项目的根目录下面有一个文件或者文件夹需要用户登陆后才能访问.如果用户在没有登录的情况下访问该文件或者该文件夹下面的文件时,直接拦截重定向到对应的登陆页面 ...
- asp.net项目中通过Web.config配置文件及文件夹的访问权限---forms
十分全面的forms验证配置: http://blog.csdn.net/qingyun1029/article/details/6184723
- [小技巧]ASP.NET Core中如何预压缩静态文件
原文地址:Pre-compressed static files with ASP.NET Core 作者:Gunnar Peipman 译者:Lamond Lu 译文:https://www.cnb ...
- ASP.NET Core 中 HttpContext 详解与使用 | Microsoft.AspNetCore.Http 详解 (转载)
“传导体” HttpContext 要理解 HttpContext 是干嘛的,首先,看图 图一 内网访问程序 图二 反向代理访问程序 ASP.NET Core 程序中,Kestrel 是一个基于 li ...
- ASP.NET Core 中 HttpContext 详解与使用 | Microsoft.AspNetCore.Http 详解
笔者没有学 ASP.NET,直接学 ASP.NET Core ,学完 ASP.NET Core MVC 基础后,开始学习 ASP.NET Core 的运行原理.发现应用程序有一个非常主要的 “传导体” ...
- (6)ASP.NET Core 中使用IHttpClientFactory发出HTTP请求
1.HttpClient类使用存在的问题 HttpClient类的使用所存在的问题,百度搜索的文章一大堆,好多都是单纯文字描述,让人感觉不太好理解,为了更好理解HttpClient使用存在的问题,下面 ...
随机推荐
- 结合nodejs开发aspnet5项目
1.安装kvm 官方教程地址:https://github.com/ligershark/Kulture 打开 powershell命令窗口,找不到可以在开始菜单菜单那块输入 powershell ...
- php访问远程服务器上的文件
test.php <?php $fp=fopen('http://www.baidu.com', 'r'); while (!feof($fp)) { $chunk=fgets($fp); ec ...
- Wiki安装
我们推荐使用Mediawiki. MediaWiki是基于php环境的,所以如果需要使用该类wiki,就要先部署php的环境. wiki下载: https://www.mediawiki.org/wi ...
- PBOC金融IC卡,卡片与终端交互的13个步骤,简介-第二组(转)
四:脱机数据认证-可选终端进行脱机数据认证来,认证卡片.记住:对于某个事情,终端与卡片谁单独也说了不算,要二者都能干才能干. 终端依据卡片(AIP)和终端(终端性能)的支持情况,决定是否使用及使用哪种 ...
- 哈希表(Hash Table)
参考: Hash table - Wiki Hash table_百度百科 从头到尾彻底解析Hash表算法 谈谈 Hash Table 我们身边的哈希,最常见的就是perl和python里面的字典了, ...
- ios视图frame和bounds的对比
bounds坐标:自己定义的坐标系统,setbound指明了本视图左上角在该坐标系统中的坐标, 默认值(0,0) frame坐标: 子视图左上角在父视图坐标系统(bounds坐标系统)中的坐标, ...
- JS控制TABLE表格在任意一行下面添加一行(有待完善)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 鼠标hover某个元素时其属性表现Css transition 过渡效果(以宽高属性居中放大为例)
<!DOCTYPE html> <html> <head> </head> <body id="body"> <! ...
- js通过继承实现私有函数
本文是原创文章,如需转载,请注明文章出处 主要思想就是在继承时,只开放共有的属性和方法,不开放另外某些函数,从而实现私有的作用. function A(){ this.x = 100; this.y ...
- 对于Python中RawString的理解
总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2.r 代表的意思是: raw 3.r 只对其 ...