事先看了asp.net伍,三弟就试着用了用,做了个小网址练习一下,有二个小模块要求上传图片到wwwroot下的images文件夹,可是aspnet5发生了翻天复地变化,在此之前得到网址根目录的的秘技不再适用。去网上翻遍了小说也没找到方法,无奈之下想到看看源码(大神不要出洋相,小编也看不懂,只是胡乱的看),终于让作者看看2个类:

namespace Microsoft.Framework.Runtime
{
    [AssemblyNeutral]
    public interface IApplicationEnvironment
    {
        string ApplicationBasePath { get; }
        string ApplicationName { get; }
        string Configuration { get; }
        FrameworkName RuntimeFramework { get; }
        string Version { get; }
    }

唯独那一个接口的完结类怎么去得到呢?经过几番尝试,找到了2个艺术:

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
自承载测试的时候,报了一个错误:

 图片 1

想开了那是因为把
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());烦扰多日的难点归根结底解决了;完整的拿走aspnet五网站物理文件根目录的代码如下:

 var approot = Context.ApplicationServices.GetService<IApplicationEnvironment>().ApplicationBasePath;

 var wwwroot = Microsoft.AspNet.Hosting.HostingUtilities.GetWebRoot(approot);

尔后甘休。

二哥首回写博客,不太擅长表明,望大神们毫不见怪

 

相关文章

网站地图xml地图