VAA*_*AAA 7 asp.net-core asp.net-core-3.0
我将一个经典C# MVC
项目迁移到.NET Core
,我有一个实用程序项目,我需要在其中访问App_Data
文件夹。
我已经在这个新项目中创建了我的App_Data
文件夹,wwwroot
但我需要从这个实用程序项目中获取对它的引用。
这是我的旧代码:
public static class Common
{
private static void DeleteTestFiles()
{
var path = HttpContext.Current.Server.MapPath("~/App_Data/Files");
.....
}
}
Run Code Online (Sandbox Code Playgroud)
我在 3.0 中读到有一种方法可以做到这一点,这里是示例:
private readonly IWebHostEnvironment _hostingEnvironment;
public HomeController(IWebHostEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
public ActionResult Index()
{
string webRootPath = _hostingEnvironment.WebRootPath;
string contentRootPath = _hostingEnvironment.ContentRootPath;
return Content(webRootPath + "\n" + contentRootPath);
}
Run Code Online (Sandbox Code Playgroud)
但是上面的代码是针对一个存在于 web 项目中的 Controller 的。我的 Utility Projects 公共类不是控制器,而是一个静态类,因此我无法使用构造函数IWebHostEnvironment
来自动注入。
任何线索如何才能获得路径,或者我可能需要手动注入 IWebHostEnvironment 但没有任何线索。
Chr*_*att 12
不要使用静态类。您可以保留与您的班级相似的内容,并将其注册为单身人士。
public class Common
{
private readonly IWebHostEnvironment _env;
public Common(IWebHostEnvironment env)
{
_env = env;
}
private void DeleteTestFiles()
{
var path = Path.Combine(_env.ContentRootPath, "App_Data/Files");
.....
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在Startup.ConfigureServices
:
services.AddSingleton<Common>();
Run Code Online (Sandbox Code Playgroud)
最后,Common
在需要的地方注入,而不仅仅是静态引用类。这就是 DI 中的工作方式,静态是行不通的。
更新:
为了使其工作,因为实用程序项目是引用Microsoft.NETCore.App
而不是Microsoft.AspNetCore.App
框架,所以您必须使用IHostEnvironment
而不是IWebHostEnvironment
.
IWebHostEnvironment
实际上实现了IHostEnvironment
接口。
做了测试,一切正常!我可以得到ContentRootPath
.
public class Common
{
private readonly IHostEnvironment _env;
public Common(IHostEnvironment env)
{
_env = env;
}
private void DeleteTestFiles()
{
var path = Path.Combine(_env.ContentRootPath, "App_Data/Files");
.....
}
}
Run Code Online (Sandbox Code Playgroud)
.Net 6(.NetCore 3及以上) 例如我想找到~/wwwroot/CSS
public class YourController : Controller
{
private readonly IWebHostEnvironment _webHostEnvironment;
public YourController (IWebHostEnvironment webHostEnvironment)
{
_webHostEnvironment= webHostEnvironment;
}
public IActionResult Index()
{
string webRootPath = _webHostEnvironment.WebRootPath;
string contentRootPath = _webHostEnvironment.ContentRootPath;
string path ="";
path = Path.Combine(webRootPath , "CSS");
//or path = Path.Combine(contentRootPath , "wwwroot" ,"CSS" );
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11675 次 |
最近记录: |