Asp.Net Core 获取应用程序相关目录

在ASP.NET Core中,可以通过以下三种方式获取应用程序所在目录:

1、使用`AppContext.BaseDirectory`属性:

string appDirectory = AppContext.BaseDirectory;

例如:D:\后端项目\testCore\test.WebApi\bin\Debug\net6.0\

2、使用`IHostEnvironment`服务: 在ASP.NET Core的启动文件(如Program.cs)中,可以通过依赖注入获取`IHostEnvironment`服务,并使用其`ContentRootPath`属性来获取应用程序所在目录:

string appDirectory = hostEnvironment.ContentRootPath;

例如:D:\后端项目\testCore\test.WebApi\wwwroot

3、使用`IHostingEnvironment`服务: 在较早版本的ASP.NET Core中,可以使用`IHostingEnvironment`服务获取应用程序所在目录。方法与上述相似:

string appDirectory = hostingEnvironment.ContentRootPath;

例如:D:\后端项目\testCore\test.WebApi\wwwroot

4、使用程序集信息获取typeof(Program)方式:

var executablePath = Assembly.GetEntryAssembly().Location;

string basePath2 =Path.GetDirectoryName(typeof(Program).Assembly.Location);

例如:D:\后端项目\testCore\test.WebApi\bin\Debug\net6.0\

5.依赖注入:

using System;

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.Hosting;

public class Program

{

public static void Main(string[] args)

{

CreateHostBuilder(args).Build().Run();

}

public static IHostBuilder CreateHostBuilder(string[] args) =>

Host.CreateDefaultBuilder(args)

.ConfigureWebHostDefaults(webBuilder =>

{

webBuilder.UseStartup<Startup>();

});

}

public class Startup

{

private readonly IHostEnvironment _hostEnvironment;

public Startup(IHostEnvironment hostEnvironment)

{

_hostEnvironment = hostEnvironment;

}

public void ConfigureServices(IServiceCollection services)

{

// 添加其他服务

string appDirectory = _hostEnvironment.ContentRootPath;

// 使用 appDirectory 进行其他操作

}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

{

// 配置中间件

app.Run(async (context) =>

{

string appDirectory = env.ContentRootPath;

await context.Response.WriteAsync($"Application Directory: {appDirectory}");

});

}

}

上面代码属NetCore早期版本,.NetCore3.1 后:

创建项目:

Startup中Configure自动注入IWebHostEnvironment:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

{

if (env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

}

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>

{

endpoints.MapControllers();

});

}

Controller中直接注入即可:

private IWebHostEnvironment _evn;

public FileUploadController(IWebHostEnvironment evn)

{

this._evn = evn;

}

使用:string webroot = _evn.WebRootPath;//拿到 wwwroot 路径

6、创建类方式:

1.先创建一个类:

public static class MyServiceProvider

{

public static IServiceProvider ServiceProvider

{

get; set;

}

}
2.Startup.cs中Configure方法中添加 :

MyServiceProvider.ServiceProvider = app.ApplicationServices;

3.在需要用到程序路径的地方,引用:

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.DependencyInjection;

string path = MyServiceProvider.ServiceProvider.GetRequiredService<IHostingEnvironment>().ContentRootPath; //.NET Core 3.1,IHostingEnvironment 要改为IHostEnvironment

效果如下:

获取了路径:D:\\Project\\MyWebsite\\UI

4.如果需要获取UI下的wwwroot

路径方法得改一下,为

static string path = MyServiceProvider.ServiceProvider.GetRequiredService<IHostingEnvironment>().WebRootPath; //.NET Core 3.1,IHostingEnvironment 要改为IHostEnvironment

相关推荐
csdn_aspnet9 小时前
在 ASP.NET Core (WebAPI) 中启用 CORS
后端·asp.net·.netcore
观无1 天前
Windows 本地电脑搭建一个私有的、类似 Gitee 的 Git 服务
gitee·jenkins·.netcore
武藤一雄3 天前
C# 异常(Exception)处理避坑指南
windows·microsoft·c#·.net·.netcore·鲁棒性
csdn_aspnet4 天前
在 ASP.NET Core 中使用自定义属性实现 HTTP 请求和响应加密
http·asp.net·.netcore
观无4 天前
.NET Core + Ocelot 网关 跨域 (CORS) 配置
状态模式·.netcore
csdn_aspnet4 天前
如何在 .NET Core WebAPI 和 Javascript 应用程序中安全地发送/接收密钥参数
javascript·.netcore·cryptojs
武藤一雄7 天前
C# 异步回调与等待机制
前端·microsoft·设计模式·微软·c#·.netcore
武藤一雄7 天前
C#万字详解 栈与托管堆 的底层逻辑
windows·microsoft·c#·.net·.netcore
武藤一雄7 天前
深入拆解.NET内存管理:从GC机制到高性能内存优化
windows·microsoft·c#·.net·wpf·.netcore·内存管理
武藤一雄9 天前
WPF/C# 应对消息洪峰与数据抖动的 8 种“抗压”策略
windows·微软·c#·wpf·.netcore·防抖·鲁棒性