通用Web,.net5.0.
IServiceProvider未包含HostingEnvironment的定义
如果你使用的是 .NET 5.0,那么 HostingEnvironment 已经被移除了。相反,你需要使用 IWebHostEnvironment 来获取 Web 主机的环境信息。
要使用 IWebHostEnvironment,你需要在应用程序的 Startup 类的构造函数中注入它,如下所示:
csharp
Copy code
public class Startup
{
private readonly IWebHostEnvironment _webHostEnvironment;
public Startup(IWebHostEnvironment webHostEnvironment)
{
_webHostEnvironment = webHostEnvironment;
}
// ...
}
在此之后,你可以在 Startup 类中的任何地方使用 _webHostEnvironment 实例来获取 Web 主机的环境信息。
如果你需要在其他类中访问 IWebHostEnvironment,你可以将其注入到该类的构造函数中,就像在 Startup 类中一样:
csharp
Copy code
public class MyService
{
private readonly IWebHostEnvironment _webHostEnvironment;
public MyService(IWebHostEnvironment webHostEnvironment)
{
_webHostEnvironment = webHostEnvironment;
}
// ...
}
然后,在应用程序的 ConfigureServices 方法中,将 MyService 添加到服务容器中:
csharp
Copy code
public void ConfigureServices(IServiceCollection services)
{
// …
services.AddTransient();
// …
}
private readonly IWebHostEnvironment _webHostEnvironment;
public HomeController(ILogger<HomeController> logger, MovieDbContext context, IWebHostEnvironment webHostEnvironment)
{
_logger = logger;
_context = context;
_webHostEnvironment = webHostEnvironment;
}
[HttpPost]
public async Task<IActionResult> Add(Movie movie)
{
if (ModelState.IsValid)
{
if (movie.PosterFile != null)
{
string uploadsFolder = Path.Combine(_webHostEnvironment.WebRootPath, "images");
string uniqueFileName = Guid.NewGuid().ToString() + "_" + movie.PosterFile.FileName;
string filePath = Path.Combine(uploadsFolder, uniqueFileName);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
await movie.PosterFile.CopyToAsync(fileStream);
}
movie.Poster = "/images/" + uniqueFileName;
}
_context.Movies.Add(movie);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(movie);
}
<div class="form-group">
<label for="poster">Poster</label>
<input type="file" class="form-control-file" id="poster" name="PosterFile">
</div>